wolfy-reader 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +277 -0
  3. package/dist/core/book.d.ts +75 -0
  4. package/dist/core/book.d.ts.map +1 -0
  5. package/dist/core/book.js +2 -0
  6. package/dist/core/book.js.map +1 -0
  7. package/dist/core/errors.d.ts +17 -0
  8. package/dist/core/errors.d.ts.map +1 -0
  9. package/dist/core/errors.js +29 -0
  10. package/dist/core/errors.js.map +1 -0
  11. package/dist/core/format.d.ts +13 -0
  12. package/dist/core/format.d.ts.map +1 -0
  13. package/dist/core/format.js +2 -0
  14. package/dist/core/format.js.map +1 -0
  15. package/dist/core/graphemes.d.ts +36 -0
  16. package/dist/core/graphemes.d.ts.map +1 -0
  17. package/dist/core/graphemes.js +62 -0
  18. package/dist/core/graphemes.js.map +1 -0
  19. package/dist/core/index.d.ts +11 -0
  20. package/dist/core/index.d.ts.map +1 -0
  21. package/dist/core/index.js +6 -0
  22. package/dist/core/index.js.map +1 -0
  23. package/dist/core/lookup.d.ts +10 -0
  24. package/dist/core/lookup.d.ts.map +1 -0
  25. package/dist/core/lookup.js +16 -0
  26. package/dist/core/lookup.js.map +1 -0
  27. package/dist/core/open.d.ts +12 -0
  28. package/dist/core/open.d.ts.map +1 -0
  29. package/dist/core/open.js +23 -0
  30. package/dist/core/open.js.map +1 -0
  31. package/dist/core/position.d.ts +121 -0
  32. package/dist/core/position.d.ts.map +1 -0
  33. package/dist/core/position.js +327 -0
  34. package/dist/core/position.js.map +1 -0
  35. package/dist/core/reading-text.d.ts +77 -0
  36. package/dist/core/reading-text.d.ts.map +1 -0
  37. package/dist/core/reading-text.js +144 -0
  38. package/dist/core/reading-text.js.map +1 -0
  39. package/dist/core/source.d.ts +17 -0
  40. package/dist/core/source.d.ts.map +1 -0
  41. package/dist/core/source.js +39 -0
  42. package/dist/core/source.js.map +1 -0
  43. package/dist/core/storage.d.ts +7 -0
  44. package/dist/core/storage.d.ts.map +1 -0
  45. package/dist/core/storage.js +2 -0
  46. package/dist/core/storage.js.map +1 -0
  47. package/dist/core/text.d.ts +18 -0
  48. package/dist/core/text.d.ts.map +1 -0
  49. package/dist/core/text.js +32 -0
  50. package/dist/core/text.js.map +1 -0
  51. package/dist/formats/epub/href.d.ts +14 -0
  52. package/dist/formats/epub/href.d.ts.map +1 -0
  53. package/dist/formats/epub/href.js +52 -0
  54. package/dist/formats/epub/href.js.map +1 -0
  55. package/dist/formats/epub/index.d.ts +3 -0
  56. package/dist/formats/epub/index.d.ts.map +1 -0
  57. package/dist/formats/epub/index.js +223 -0
  58. package/dist/formats/epub/index.js.map +1 -0
  59. package/dist/formats/epub/opf.d.ts +27 -0
  60. package/dist/formats/epub/opf.d.ts.map +1 -0
  61. package/dist/formats/epub/opf.js +110 -0
  62. package/dist/formats/epub/opf.js.map +1 -0
  63. package/dist/formats/epub/toc.d.ts +6 -0
  64. package/dist/formats/epub/toc.d.ts.map +1 -0
  65. package/dist/formats/epub/toc.js +88 -0
  66. package/dist/formats/epub/toc.js.map +1 -0
  67. package/dist/formats/fb2/index.d.ts +13 -0
  68. package/dist/formats/fb2/index.d.ts.map +1 -0
  69. package/dist/formats/fb2/index.js +317 -0
  70. package/dist/formats/fb2/index.js.map +1 -0
  71. package/dist/formats/index.d.ts +4 -0
  72. package/dist/formats/index.d.ts.map +1 -0
  73. package/dist/formats/index.js +4 -0
  74. package/dist/formats/index.js.map +1 -0
  75. package/dist/formats/text/index.d.ts +11 -0
  76. package/dist/formats/text/index.d.ts.map +1 -0
  77. package/dist/formats/text/index.js +201 -0
  78. package/dist/formats/text/index.js.map +1 -0
  79. package/dist/formats/xml.d.ts +33 -0
  80. package/dist/formats/xml.d.ts.map +1 -0
  81. package/dist/formats/xml.js +321 -0
  82. package/dist/formats/xml.js.map +1 -0
  83. package/dist/index.d.ts +27 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +28 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/layout/chunk.d.ts +51 -0
  88. package/dist/layout/chunk.d.ts.map +1 -0
  89. package/dist/layout/chunk.js +131 -0
  90. package/dist/layout/chunk.js.map +1 -0
  91. package/dist/layout/index.d.ts +238 -0
  92. package/dist/layout/index.d.ts.map +1 -0
  93. package/dist/layout/index.js +476 -0
  94. package/dist/layout/index.js.map +1 -0
  95. package/dist/reader/index.d.ts +231 -0
  96. package/dist/reader/index.d.ts.map +1 -0
  97. package/dist/reader/index.js +958 -0
  98. package/dist/reader/index.js.map +1 -0
  99. package/dist/reader/input.d.ts +69 -0
  100. package/dist/reader/input.d.ts.map +1 -0
  101. package/dist/reader/input.js +75 -0
  102. package/dist/reader/input.js.map +1 -0
  103. package/dist/search/extract.d.ts +51 -0
  104. package/dist/search/extract.d.ts.map +1 -0
  105. package/dist/search/extract.js +401 -0
  106. package/dist/search/extract.js.map +1 -0
  107. package/dist/search/index.d.ts +11 -0
  108. package/dist/search/index.d.ts.map +1 -0
  109. package/dist/search/index.js +11 -0
  110. package/dist/search/index.js.map +1 -0
  111. package/dist/search/matcher.d.ts +56 -0
  112. package/dist/search/matcher.d.ts.map +1 -0
  113. package/dist/search/matcher.js +128 -0
  114. package/dist/search/matcher.js.map +1 -0
  115. package/dist/search/normalize.d.ts +48 -0
  116. package/dist/search/normalize.d.ts.map +1 -0
  117. package/dist/search/normalize.js +103 -0
  118. package/dist/search/normalize.js.map +1 -0
  119. package/dist/view/allowlist.d.ts +59 -0
  120. package/dist/view/allowlist.d.ts.map +1 -0
  121. package/dist/view/allowlist.js +198 -0
  122. package/dist/view/allowlist.js.map +1 -0
  123. package/dist/view/appearance.d.ts +137 -0
  124. package/dist/view/appearance.d.ts.map +1 -0
  125. package/dist/view/appearance.js +274 -0
  126. package/dist/view/appearance.js.map +1 -0
  127. package/dist/view/css.d.ts +24 -0
  128. package/dist/view/css.d.ts.map +1 -0
  129. package/dist/view/css.js +153 -0
  130. package/dist/view/css.js.map +1 -0
  131. package/dist/view/frame.d.ts +54 -0
  132. package/dist/view/frame.d.ts.map +1 -0
  133. package/dist/view/frame.js +980 -0
  134. package/dist/view/frame.js.map +1 -0
  135. package/dist/view/host.d.ts +160 -0
  136. package/dist/view/host.d.ts.map +1 -0
  137. package/dist/view/host.js +385 -0
  138. package/dist/view/host.js.map +1 -0
  139. package/dist/view/index.d.ts +12 -0
  140. package/dist/view/index.d.ts.map +1 -0
  141. package/dist/view/index.js +7 -0
  142. package/dist/view/index.js.map +1 -0
  143. package/dist/view/protocol.d.ts +220 -0
  144. package/dist/view/protocol.d.ts.map +1 -0
  145. package/dist/view/protocol.js +246 -0
  146. package/dist/view/protocol.js.map +1 -0
  147. package/dist/view/reference.d.ts +18 -0
  148. package/dist/view/reference.d.ts.map +1 -0
  149. package/dist/view/reference.js +25 -0
  150. package/dist/view/reference.js.map +1 -0
  151. package/dist/view/resources.d.ts +51 -0
  152. package/dist/view/resources.d.ts.map +1 -0
  153. package/dist/view/resources.js +242 -0
  154. package/dist/view/resources.js.map +1 -0
  155. package/dist/view/sanitize.d.ts +32 -0
  156. package/dist/view/sanitize.d.ts.map +1 -0
  157. package/dist/view/sanitize.js +226 -0
  158. package/dist/view/sanitize.js.map +1 -0
  159. package/dist/zip/central.d.ts +12 -0
  160. package/dist/zip/central.d.ts.map +1 -0
  161. package/dist/zip/central.js +72 -0
  162. package/dist/zip/central.js.map +1 -0
  163. package/dist/zip/crc32.d.ts +3 -0
  164. package/dist/zip/crc32.d.ts.map +1 -0
  165. package/dist/zip/crc32.js +28 -0
  166. package/dist/zip/crc32.js.map +1 -0
  167. package/dist/zip/eocd.d.ts +9 -0
  168. package/dist/zip/eocd.d.ts.map +1 -0
  169. package/dist/zip/eocd.js +84 -0
  170. package/dist/zip/eocd.js.map +1 -0
  171. package/dist/zip/errors.d.ts +19 -0
  172. package/dist/zip/errors.d.ts.map +1 -0
  173. package/dist/zip/errors.js +37 -0
  174. package/dist/zip/errors.js.map +1 -0
  175. package/dist/zip/index.d.ts +18 -0
  176. package/dist/zip/index.d.ts.map +1 -0
  177. package/dist/zip/index.js +78 -0
  178. package/dist/zip/index.js.map +1 -0
  179. package/dist/zip/inflate.d.ts +2 -0
  180. package/dist/zip/inflate.d.ts.map +1 -0
  181. package/dist/zip/inflate.js +43 -0
  182. package/dist/zip/inflate.js.map +1 -0
  183. package/dist/zip/source.d.ts +15 -0
  184. package/dist/zip/source.d.ts.map +1 -0
  185. package/dist/zip/source.js +34 -0
  186. package/dist/zip/source.js.map +1 -0
  187. package/package.json +75 -0
  188. package/src/core/book.ts +80 -0
  189. package/src/core/errors.ts +31 -0
  190. package/src/core/format.ts +14 -0
  191. package/src/core/graphemes.ts +73 -0
  192. package/src/core/index.ts +27 -0
  193. package/src/core/lookup.ts +16 -0
  194. package/src/core/open.ts +31 -0
  195. package/src/core/position.ts +485 -0
  196. package/src/core/reading-text.ts +200 -0
  197. package/src/core/source.ts +61 -0
  198. package/src/core/storage.ts +6 -0
  199. package/src/core/text.ts +35 -0
  200. package/src/formats/epub/href.ts +54 -0
  201. package/src/formats/epub/index.ts +235 -0
  202. package/src/formats/epub/opf.ts +143 -0
  203. package/src/formats/epub/toc.ts +120 -0
  204. package/src/formats/fb2/index.ts +348 -0
  205. package/src/formats/index.ts +3 -0
  206. package/src/formats/text/index.ts +208 -0
  207. package/src/formats/xml.ts +326 -0
  208. package/src/index.ts +26 -0
  209. package/src/layout/chunk.ts +169 -0
  210. package/src/layout/index.ts +573 -0
  211. package/src/reader/index.ts +1206 -0
  212. package/src/reader/input.ts +122 -0
  213. package/src/search/extract.ts +403 -0
  214. package/src/search/index.ts +10 -0
  215. package/src/search/matcher.ts +187 -0
  216. package/src/search/normalize.ts +122 -0
  217. package/src/view/allowlist.ts +273 -0
  218. package/src/view/appearance.ts +380 -0
  219. package/src/view/css.ts +172 -0
  220. package/src/view/frame.ts +1018 -0
  221. package/src/view/host.ts +527 -0
  222. package/src/view/index.ts +24 -0
  223. package/src/view/protocol.ts +412 -0
  224. package/src/view/reference.ts +30 -0
  225. package/src/view/resources.ts +265 -0
  226. package/src/view/sanitize.ts +266 -0
  227. package/src/zip/central.ts +85 -0
  228. package/src/zip/crc32.ts +30 -0
  229. package/src/zip/eocd.ts +97 -0
  230. package/src/zip/errors.ts +41 -0
  231. package/src/zip/index.ts +114 -0
  232. package/src/zip/inflate.ts +41 -0
  233. package/src/zip/source.ts +51 -0
@@ -0,0 +1,220 @@
1
+ /**
2
+ * The host↔frame message protocol.
3
+ *
4
+ * Every message is validated on receipt on both sides. Origin checking cannot
5
+ * do that job here: the frame has an opaque origin, so its messages arrive with
6
+ * an origin of `'null'`, which authenticates nothing. What the host trusts is
7
+ * the message *source* (it must be this frame's window) plus the shape below.
8
+ *
9
+ * The frame's copy of the host-message validator lives inside a template string
10
+ * in `frame.ts` (it cannot import), so the two must be kept in step by hand. Any
11
+ * change here — including this version bump — changes both.
12
+ */
13
+ export declare const PROTOCOL_VERSION = 9;
14
+ export interface Measurement {
15
+ readonly width: number;
16
+ readonly height: number;
17
+ }
18
+ /** The paginator's flow mode. */
19
+ export type LayoutMode = 'paginated' | 'scrolled';
20
+ export interface PaginateOptions {
21
+ readonly mode: LayoutMode;
22
+ readonly pageWidth: number;
23
+ readonly pageHeight: number;
24
+ readonly columnGap: number;
25
+ readonly chunkChars: number;
26
+ /** How many chunks either side of the active one stay realized. */
27
+ readonly windowChunks: number;
28
+ /**
29
+ * Text columns per page (a reflowing typography knob): 1 or 2. A page is split
30
+ * into this many intra-page columns, each `columnGap` apart, so a page of
31
+ * two-column layout paints twice the text before a turn. The other typography
32
+ * knobs ride the appearance stylesheet in the srcdoc, but column geometry is the
33
+ * paginator's, so it travels on the wire alongside `columnGap`.
34
+ */
35
+ readonly columnCount: number;
36
+ }
37
+ /** What the frame reports after (re-)paginating. Page count may be an estimate. */
38
+ export interface PaginationState {
39
+ readonly pageCount: number;
40
+ /** True once every chunk has been measured; false while the count is an estimate. */
41
+ readonly firm: boolean;
42
+ readonly realizedChunks: number;
43
+ readonly totalChunks: number;
44
+ /** Content scroll size in scrolled mode; page geometry otherwise. */
45
+ readonly contentWidth: number;
46
+ readonly contentHeight: number;
47
+ }
48
+ /** A character offset within the section's concatenated chunk text. */
49
+ export interface PageAnchor {
50
+ /** Character offset of the first glyph painted on the page, or -1 if none. */
51
+ readonly offset: number;
52
+ }
53
+ export type HostMessage = {
54
+ readonly v: typeof PROTOCOL_VERSION;
55
+ readonly type: 'ping';
56
+ readonly id: number;
57
+ } | {
58
+ readonly v: typeof PROTOCOL_VERSION;
59
+ readonly type: 'measure';
60
+ readonly id: number;
61
+ } | {
62
+ readonly v: typeof PROTOCOL_VERSION;
63
+ readonly type: 'paginate';
64
+ readonly id: number;
65
+ readonly options: PaginateOptions;
66
+ } | {
67
+ readonly v: typeof PROTOCOL_VERSION;
68
+ readonly type: 'relayout';
69
+ readonly id: number;
70
+ } | {
71
+ readonly v: typeof PROTOCOL_VERSION;
72
+ readonly type: 'goToPage';
73
+ readonly id: number;
74
+ readonly page: number;
75
+ } | {
76
+ readonly v: typeof PROTOCOL_VERSION;
77
+ readonly type: 'offsetOfPage';
78
+ readonly id: number;
79
+ readonly page: number;
80
+ } | {
81
+ readonly v: typeof PROTOCOL_VERSION;
82
+ readonly type: 'pageOfOffset';
83
+ readonly id: number;
84
+ readonly offset: number;
85
+ } | {
86
+ readonly v: typeof PROTOCOL_VERSION;
87
+ readonly type: 'offsetOfElementId';
88
+ readonly id: number;
89
+ readonly elementId: string;
90
+ } | {
91
+ readonly v: typeof PROTOCOL_VERSION;
92
+ readonly type: 'sectionText';
93
+ readonly id: number;
94
+ } | {
95
+ readonly v: typeof PROTOCOL_VERSION;
96
+ readonly type: 'diagnostics';
97
+ readonly id: number;
98
+ } | {
99
+ readonly v: typeof PROTOCOL_VERSION;
100
+ readonly type: 'decorate';
101
+ readonly id: number;
102
+ /** Caller-chosen id: re-issuing the same id replaces that overlay. */
103
+ readonly decorationId: string;
104
+ /** UTF-16 code-unit offset of the range start in the section text. */
105
+ readonly start: number;
106
+ /** UTF-16 code-unit offset of the range end in the section text. */
107
+ readonly end: number;
108
+ /** The class name each painted overlay box carries. */
109
+ readonly className: string;
110
+ } | {
111
+ readonly v: typeof PROTOCOL_VERSION;
112
+ readonly type: 'undecorate';
113
+ readonly id: number;
114
+ readonly decorationId: string;
115
+ };
116
+ export type FrameMessage = {
117
+ readonly v: typeof PROTOCOL_VERSION;
118
+ readonly type: 'ready';
119
+ } | {
120
+ readonly v: typeof PROTOCOL_VERSION;
121
+ readonly type: 'pong';
122
+ readonly id: number;
123
+ } | {
124
+ readonly v: typeof PROTOCOL_VERSION;
125
+ readonly type: 'measured';
126
+ readonly id: number;
127
+ readonly width: number;
128
+ readonly height: number;
129
+ } | {
130
+ readonly v: typeof PROTOCOL_VERSION;
131
+ readonly type: 'paginated';
132
+ readonly id: number;
133
+ readonly state: PaginationState;
134
+ } | {
135
+ readonly v: typeof PROTOCOL_VERSION;
136
+ readonly type: 'movedToPage';
137
+ readonly id: number;
138
+ readonly page: number;
139
+ } | {
140
+ readonly v: typeof PROTOCOL_VERSION;
141
+ readonly type: 'offset';
142
+ readonly id: number;
143
+ readonly offset: number;
144
+ } | {
145
+ readonly v: typeof PROTOCOL_VERSION;
146
+ readonly type: 'page';
147
+ readonly id: number;
148
+ readonly page: number;
149
+ } | {
150
+ readonly v: typeof PROTOCOL_VERSION;
151
+ readonly type: 'text';
152
+ readonly id: number;
153
+ readonly text: string;
154
+ } | {
155
+ readonly v: typeof PROTOCOL_VERSION;
156
+ readonly type: 'decorated';
157
+ readonly id: number;
158
+ /** Number of overlay boxes painted for the range (0 on a soft-miss). */
159
+ readonly boxes: number;
160
+ } | {
161
+ readonly v: typeof PROTOCOL_VERSION;
162
+ readonly type: 'diagnosticsReport';
163
+ readonly id: number;
164
+ readonly domNodes: number;
165
+ readonly realizedChunks: number;
166
+ readonly totalChunks: number;
167
+ } | {
168
+ readonly v: typeof PROTOCOL_VERSION;
169
+ readonly type: 'violation';
170
+ readonly directive: string;
171
+ readonly blockedUri: string;
172
+ } | {
173
+ readonly v: typeof PROTOCOL_VERSION;
174
+ readonly type: 'error';
175
+ readonly message: string;
176
+ } | {
177
+ readonly v: typeof PROTOCOL_VERSION;
178
+ readonly type: 'linkclick';
179
+ readonly href: string;
180
+ } | {
181
+ readonly v: typeof PROTOCOL_VERSION;
182
+ readonly type: 'key';
183
+ readonly key: string;
184
+ } | {
185
+ readonly v: typeof PROTOCOL_VERSION;
186
+ readonly type: 'swipe';
187
+ readonly dx: number;
188
+ readonly dy: number;
189
+ } | {
190
+ readonly v: typeof PROTOCOL_VERSION;
191
+ readonly type: 'tap';
192
+ readonly x: number;
193
+ readonly y: number;
194
+ readonly width: number;
195
+ readonly height: number;
196
+ } | {
197
+ readonly v: typeof PROTOCOL_VERSION;
198
+ readonly type: 'selection';
199
+ /** UTF-16 code-unit offset of the selection's start in the section text. */
200
+ readonly start: number;
201
+ /** UTF-16 code-unit offset of the selection's end in the section text. */
202
+ readonly end: number;
203
+ /** The selected text, exactly as the frame reads it. */
204
+ readonly text: string;
205
+ } | {
206
+ readonly v: typeof PROTOCOL_VERSION;
207
+ readonly type: 'imagetap';
208
+ /**
209
+ * The image's already-substituted `data:` URL — the full-resolution bytes
210
+ * `applyResources` served into the frame's `<img src>`. Never a `blob:` URL:
211
+ * the opaque-origin frame cannot mint one the host could load, and the host
212
+ * overlay renders these bytes directly. The host verifies the `data:` scheme.
213
+ */
214
+ readonly src: string;
215
+ /** The image's `alt` text, for the overlay's accessible name. */
216
+ readonly alt: string;
217
+ };
218
+ export declare function asFrameMessage(data: unknown): FrameMessage | null;
219
+ export declare function asHostMessage(data: unknown): HostMessage | null;
220
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/view/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * The host↔frame message protocol.
3
+ *
4
+ * Every message is validated on receipt on both sides. Origin checking cannot
5
+ * do that job here: the frame has an opaque origin, so its messages arrive with
6
+ * an origin of `'null'`, which authenticates nothing. What the host trusts is
7
+ * the message *source* (it must be this frame's window) plus the shape below.
8
+ *
9
+ * The frame's copy of the host-message validator lives inside a template string
10
+ * in `frame.ts` (it cannot import), so the two must be kept in step by hand. Any
11
+ * change here — including this version bump — changes both.
12
+ */
13
+ export const PROTOCOL_VERSION = 9;
14
+ function asRecord(value) {
15
+ return typeof value === 'object' && value !== null ? value : null;
16
+ }
17
+ function asPaginationState(value) {
18
+ const state = asRecord(value);
19
+ if (state === null)
20
+ return null;
21
+ const pageCount = state['pageCount'];
22
+ const firm = state['firm'];
23
+ const realizedChunks = state['realizedChunks'];
24
+ const totalChunks = state['totalChunks'];
25
+ const contentWidth = state['contentWidth'];
26
+ const contentHeight = state['contentHeight'];
27
+ if (typeof pageCount !== 'number' ||
28
+ typeof firm !== 'boolean' ||
29
+ typeof realizedChunks !== 'number' ||
30
+ typeof totalChunks !== 'number' ||
31
+ typeof contentWidth !== 'number' ||
32
+ typeof contentHeight !== 'number') {
33
+ return null;
34
+ }
35
+ return { pageCount, firm, realizedChunks, totalChunks, contentWidth, contentHeight };
36
+ }
37
+ export function asFrameMessage(data) {
38
+ const message = asRecord(data);
39
+ if (message === null || message['v'] !== PROTOCOL_VERSION)
40
+ return null;
41
+ const id = message['id'];
42
+ switch (message['type']) {
43
+ case 'ready':
44
+ return { v: PROTOCOL_VERSION, type: 'ready' };
45
+ case 'pong':
46
+ return typeof id === 'number' ? { v: PROTOCOL_VERSION, type: 'pong', id } : null;
47
+ case 'measured': {
48
+ const width = message['width'];
49
+ const height = message['height'];
50
+ if (typeof id !== 'number' || typeof width !== 'number' || typeof height !== 'number')
51
+ return null;
52
+ return { v: PROTOCOL_VERSION, type: 'measured', id, width, height };
53
+ }
54
+ case 'paginated': {
55
+ if (typeof id !== 'number')
56
+ return null;
57
+ const state = asPaginationState(message['state']);
58
+ return state === null ? null : { v: PROTOCOL_VERSION, type: 'paginated', id, state };
59
+ }
60
+ case 'movedToPage': {
61
+ const page = message['page'];
62
+ if (typeof id !== 'number' || typeof page !== 'number')
63
+ return null;
64
+ return { v: PROTOCOL_VERSION, type: 'movedToPage', id, page };
65
+ }
66
+ case 'offset': {
67
+ const offset = message['offset'];
68
+ if (typeof id !== 'number' || typeof offset !== 'number')
69
+ return null;
70
+ return { v: PROTOCOL_VERSION, type: 'offset', id, offset };
71
+ }
72
+ case 'page': {
73
+ const page = message['page'];
74
+ if (typeof id !== 'number' || typeof page !== 'number')
75
+ return null;
76
+ return { v: PROTOCOL_VERSION, type: 'page', id, page };
77
+ }
78
+ case 'text': {
79
+ const text = message['text'];
80
+ if (typeof id !== 'number' || typeof text !== 'string')
81
+ return null;
82
+ return { v: PROTOCOL_VERSION, type: 'text', id, text };
83
+ }
84
+ case 'decorated': {
85
+ const boxes = message['boxes'];
86
+ if (typeof id !== 'number' || typeof boxes !== 'number')
87
+ return null;
88
+ return { v: PROTOCOL_VERSION, type: 'decorated', id, boxes };
89
+ }
90
+ case 'diagnosticsReport': {
91
+ const domNodes = message['domNodes'];
92
+ const realizedChunks = message['realizedChunks'];
93
+ const totalChunks = message['totalChunks'];
94
+ if (typeof id !== 'number' ||
95
+ typeof domNodes !== 'number' ||
96
+ typeof realizedChunks !== 'number' ||
97
+ typeof totalChunks !== 'number') {
98
+ return null;
99
+ }
100
+ return { v: PROTOCOL_VERSION, type: 'diagnosticsReport', id, domNodes, realizedChunks, totalChunks };
101
+ }
102
+ case 'violation': {
103
+ const directive = message['directive'];
104
+ const blockedUri = message['blockedUri'];
105
+ if (typeof directive !== 'string' || typeof blockedUri !== 'string')
106
+ return null;
107
+ return { v: PROTOCOL_VERSION, type: 'violation', directive, blockedUri };
108
+ }
109
+ case 'error': {
110
+ const text = message['message'];
111
+ return typeof text === 'string' ? { v: PROTOCOL_VERSION, type: 'error', message: text } : null;
112
+ }
113
+ case 'linkclick': {
114
+ const href = message['href'];
115
+ return typeof href === 'string' ? { v: PROTOCOL_VERSION, type: 'linkclick', href } : null;
116
+ }
117
+ case 'key': {
118
+ const key = message['key'];
119
+ return typeof key === 'string' ? { v: PROTOCOL_VERSION, type: 'key', key } : null;
120
+ }
121
+ case 'swipe': {
122
+ const dx = message['dx'];
123
+ const dy = message['dy'];
124
+ if (typeof dx !== 'number' || typeof dy !== 'number')
125
+ return null;
126
+ return { v: PROTOCOL_VERSION, type: 'swipe', dx, dy };
127
+ }
128
+ case 'tap': {
129
+ const x = message['x'];
130
+ const y = message['y'];
131
+ const width = message['width'];
132
+ const height = message['height'];
133
+ if (typeof x !== 'number' ||
134
+ typeof y !== 'number' ||
135
+ typeof width !== 'number' ||
136
+ typeof height !== 'number') {
137
+ return null;
138
+ }
139
+ return { v: PROTOCOL_VERSION, type: 'tap', x, y, width, height };
140
+ }
141
+ case 'selection': {
142
+ const start = message['start'];
143
+ const end = message['end'];
144
+ const text = message['text'];
145
+ if (typeof start !== 'number' || typeof end !== 'number' || typeof text !== 'string') {
146
+ return null;
147
+ }
148
+ return { v: PROTOCOL_VERSION, type: 'selection', start, end, text };
149
+ }
150
+ case 'imagetap': {
151
+ const src = message['src'];
152
+ const alt = message['alt'];
153
+ if (typeof src !== 'string' || typeof alt !== 'string')
154
+ return null;
155
+ return { v: PROTOCOL_VERSION, type: 'imagetap', src, alt };
156
+ }
157
+ default:
158
+ return null;
159
+ }
160
+ }
161
+ function asPaginateOptions(value) {
162
+ const options = asRecord(value);
163
+ if (options === null)
164
+ return null;
165
+ const mode = options['mode'];
166
+ const pageWidth = options['pageWidth'];
167
+ const pageHeight = options['pageHeight'];
168
+ const columnGap = options['columnGap'];
169
+ const chunkChars = options['chunkChars'];
170
+ const windowChunks = options['windowChunks'];
171
+ const columnCount = options['columnCount'];
172
+ if ((mode !== 'paginated' && mode !== 'scrolled') ||
173
+ typeof pageWidth !== 'number' ||
174
+ typeof pageHeight !== 'number' ||
175
+ typeof columnGap !== 'number' ||
176
+ typeof chunkChars !== 'number' ||
177
+ typeof windowChunks !== 'number' ||
178
+ typeof columnCount !== 'number') {
179
+ return null;
180
+ }
181
+ return { mode, pageWidth, pageHeight, columnGap, chunkChars, windowChunks, columnCount };
182
+ }
183
+ export function asHostMessage(data) {
184
+ const message = asRecord(data);
185
+ if (message === null || message['v'] !== PROTOCOL_VERSION)
186
+ return null;
187
+ const id = message['id'];
188
+ if (typeof id !== 'number')
189
+ return null;
190
+ switch (message['type']) {
191
+ case 'ping':
192
+ return { v: PROTOCOL_VERSION, type: 'ping', id };
193
+ case 'measure':
194
+ return { v: PROTOCOL_VERSION, type: 'measure', id };
195
+ case 'paginate': {
196
+ const options = asPaginateOptions(message['options']);
197
+ return options === null ? null : { v: PROTOCOL_VERSION, type: 'paginate', id, options };
198
+ }
199
+ case 'relayout':
200
+ return { v: PROTOCOL_VERSION, type: 'relayout', id };
201
+ case 'goToPage': {
202
+ const page = message['page'];
203
+ return typeof page === 'number' ? { v: PROTOCOL_VERSION, type: 'goToPage', id, page } : null;
204
+ }
205
+ case 'offsetOfPage': {
206
+ const page = message['page'];
207
+ return typeof page === 'number' ? { v: PROTOCOL_VERSION, type: 'offsetOfPage', id, page } : null;
208
+ }
209
+ case 'pageOfOffset': {
210
+ const offset = message['offset'];
211
+ return typeof offset === 'number' ? { v: PROTOCOL_VERSION, type: 'pageOfOffset', id, offset } : null;
212
+ }
213
+ case 'offsetOfElementId': {
214
+ const elementId = message['elementId'];
215
+ return typeof elementId === 'string'
216
+ ? { v: PROTOCOL_VERSION, type: 'offsetOfElementId', id, elementId }
217
+ : null;
218
+ }
219
+ case 'sectionText':
220
+ return { v: PROTOCOL_VERSION, type: 'sectionText', id };
221
+ case 'diagnostics':
222
+ return { v: PROTOCOL_VERSION, type: 'diagnostics', id };
223
+ case 'decorate': {
224
+ const decorationId = message['decorationId'];
225
+ const start = message['start'];
226
+ const end = message['end'];
227
+ const className = message['className'];
228
+ if (typeof decorationId !== 'string' ||
229
+ typeof start !== 'number' ||
230
+ typeof end !== 'number' ||
231
+ typeof className !== 'string') {
232
+ return null;
233
+ }
234
+ return { v: PROTOCOL_VERSION, type: 'decorate', id, decorationId, start, end, className };
235
+ }
236
+ case 'undecorate': {
237
+ const decorationId = message['decorationId'];
238
+ return typeof decorationId === 'string'
239
+ ? { v: PROTOCOL_VERSION, type: 'undecorate', id, decorationId }
240
+ : null;
241
+ }
242
+ default:
243
+ return null;
244
+ }
245
+ }
246
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/view/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Reference classification and relative-space joining.
3
+ *
4
+ * Classification and normalization live in `src/core/reading-text.ts` and are
5
+ * re-exported here under their established names: the headless search extractor
6
+ * must classify an `<img src>` exactly the way the resource layer does (the
7
+ * alt-substitution decision is part of the canonical reading text), and search
8
+ * may not import `src/view`. One definition, two consumers.
9
+ */
10
+ export { classifyReference, normalizeReference, type ClassifiedReference, type ReferenceKind, } from '../core/reading-text.ts';
11
+ /**
12
+ * Joins a reference found inside a document that was itself reached by `base`.
13
+ * Both are expressed in the section's reference space: `Section.resolve()`
14
+ * resolves only relative to the section, so a stylesheet's own imports have to
15
+ * be re-expressed relative to the section before they can be resolved at all.
16
+ */
17
+ export declare function joinReference(base: string, reference: string): string;
18
+ //# sourceMappingURL=reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/view/reference.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,yBAAyB,CAAC;AAIjC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKrE"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Reference classification and relative-space joining.
3
+ *
4
+ * Classification and normalization live in `src/core/reading-text.ts` and are
5
+ * re-exported here under their established names: the headless search extractor
6
+ * must classify an `<img src>` exactly the way the resource layer does (the
7
+ * alt-substitution decision is part of the canonical reading text), and search
8
+ * may not import `src/view`. One definition, two consumers.
9
+ */
10
+ export { classifyReference, normalizeReference, } from '../core/reading-text.js';
11
+ import { normalizeReference } from '../core/reading-text.js';
12
+ /**
13
+ * Joins a reference found inside a document that was itself reached by `base`.
14
+ * Both are expressed in the section's reference space: `Section.resolve()`
15
+ * resolves only relative to the section, so a stylesheet's own imports have to
16
+ * be re-expressed relative to the section before they can be resolved at all.
17
+ */
18
+ export function joinReference(base, reference) {
19
+ if (reference.startsWith('/'))
20
+ return reference;
21
+ const slash = base.lastIndexOf('/');
22
+ const directory = slash === -1 ? '' : base.slice(0, slash + 1);
23
+ return normalizeReference(directory + reference);
24
+ }
25
+ //# sourceMappingURL=reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/view/reference.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAGnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,SAAiB;IAC3D,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/D,OAAO,kBAAkB,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,51 @@
1
+ import type { Resource } from '../core/index.ts';
2
+ /** What a reference that names nothing loadable is rewritten to. */
3
+ export declare const UNRESOLVABLE_URL = "about:invalid";
4
+ export type ReferenceResolver = (reference: string) => Resource | undefined;
5
+ export interface ResourceSummary {
6
+ /** Data URLs minted for this render. */
7
+ readonly dataUrls: number;
8
+ readonly resolved: readonly string[];
9
+ readonly unresolved: readonly string[];
10
+ /** References that resolved but whose media type this host will not serve. */
11
+ readonly refused: readonly string[];
12
+ /** References left as written for the CSP to refuse. */
13
+ readonly remote: readonly string[];
14
+ /** Images replaced by their alt text because they could not be resolved. */
15
+ readonly altSubstituted: number;
16
+ }
17
+ /**
18
+ * Turns references found in book content into `data:` URLs.
19
+ *
20
+ * `blob:` is what the plan asked for and it cannot work here: a blob URL
21
+ * belongs to the origin that created it, and the frame's origin is opaque, so
22
+ * the frame is refused the host's blob URLs outright — measured in Chromium as
23
+ * "Not allowed to load local resource", below CSP, with no violation event to
24
+ * observe. A `data:` URL carries its own bytes and has no origin to check, so
25
+ * it crosses the boundary the sandbox deliberately makes uncrossable. The cost
26
+ * is base64's 33% and no revocation handle; both are bounded by one section.
27
+ */
28
+ export declare class ResourceRegistry {
29
+ #private;
30
+ constructor(resolve?: ReferenceResolver);
31
+ get summary(): Omit<ResourceSummary, 'altSubstituted'>;
32
+ /**
33
+ * Memoized by reference string, not by the resource object: the contract
34
+ * promises equal bytes for equal references, not one shared object.
35
+ */
36
+ urlForResource(reference: string): Promise<string | undefined>;
37
+ urlForStylesheet(reference: string, ancestors?: ReadonlySet<string>): Promise<string | undefined>;
38
+ rewriteStylesheet(css: string, base: string, ancestors?: ReadonlySet<string>): Promise<string>;
39
+ /**
40
+ * Drops everything this render allocated. Data URLs hold no handle to
41
+ * release, so this frees memoized strings and stops any in-flight load from
42
+ * minting more — there is no orphan URL a render can leave behind.
43
+ */
44
+ release(): void;
45
+ }
46
+ /**
47
+ * Replaces every in-book reference in a sanitized document with a `blob:` URL.
48
+ * Runs after sanitization, so it only ever sees attributes the allowlist kept.
49
+ */
50
+ export declare function applyResources(doc: Document, registry: ResourceRegistry): Promise<ResourceSummary>;
51
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/view/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAOjD,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAqBD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;;IAW3B,YAAY,OAAO,CAAC,EAAE,iBAAiB,EAEtC;IAED,IAAI,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAQrD;IAED;;;OAGG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO7D;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,WAAW,CAAC,MAAM,CAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU9G;IAED,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,WAAW,CAAC,MAAM,CAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3G;IAED;;;;OAIG;IACH,OAAO,IAAI,IAAI,CAId;CAsDF;AAkBD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwDxG"}