@orz/ui-hex 0.0.0-stage → 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 (84) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +536 -2
  3. package/dist/column-fit.d.ts +16 -0
  4. package/dist/column-fit.d.ts.map +1 -0
  5. package/dist/column-fit.js +22 -0
  6. package/dist/column-fit.js.map +1 -0
  7. package/dist/decode.d.ts +11 -0
  8. package/dist/decode.d.ts.map +1 -0
  9. package/dist/decode.js +63 -0
  10. package/dist/decode.js.map +1 -0
  11. package/dist/document.d.ts +75 -0
  12. package/dist/document.d.ts.map +1 -0
  13. package/dist/document.js +523 -0
  14. package/dist/document.js.map +1 -0
  15. package/dist/editing.d.ts +66 -0
  16. package/dist/editing.d.ts.map +1 -0
  17. package/dist/editing.js +202 -0
  18. package/dist/editing.js.map +1 -0
  19. package/dist/encoding-picker.d.ts +6 -0
  20. package/dist/encoding-picker.d.ts.map +1 -0
  21. package/dist/encoding-picker.js +84 -0
  22. package/dist/encoding-picker.js.map +1 -0
  23. package/dist/encodings.d.ts +19 -0
  24. package/dist/encodings.d.ts.map +1 -0
  25. package/dist/encodings.js +106 -0
  26. package/dist/encodings.js.map +1 -0
  27. package/dist/format.d.ts +29 -0
  28. package/dist/format.d.ts.map +1 -0
  29. package/dist/format.js +73 -0
  30. package/dist/format.js.map +1 -0
  31. package/dist/hex-editor.d.ts +27 -0
  32. package/dist/hex-editor.d.ts.map +1 -0
  33. package/dist/hex-editor.js +270 -0
  34. package/dist/hex-editor.js.map +1 -0
  35. package/dist/hex-grid.d.ts +102 -0
  36. package/dist/hex-grid.d.ts.map +1 -0
  37. package/dist/hex-grid.js +860 -0
  38. package/dist/hex-grid.js.map +1 -0
  39. package/dist/hex-inspector.d.ts +12 -0
  40. package/dist/hex-inspector.d.ts.map +1 -0
  41. package/dist/hex-inspector.js +68 -0
  42. package/dist/hex-inspector.js.map +1 -0
  43. package/dist/hex-paste.d.ts +26 -0
  44. package/dist/hex-paste.d.ts.map +1 -0
  45. package/dist/hex-paste.js +42 -0
  46. package/dist/hex-paste.js.map +1 -0
  47. package/dist/hex-view.d.ts +4 -0
  48. package/dist/hex-view.d.ts.map +1 -0
  49. package/dist/hex-view.js +6 -0
  50. package/dist/hex-view.js.map +1 -0
  51. package/dist/index.d.ts +11 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +10 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/navigation.d.ts +25 -0
  56. package/dist/navigation.d.ts.map +1 -0
  57. package/dist/navigation.js +100 -0
  58. package/dist/navigation.js.map +1 -0
  59. package/dist/page-cache.d.ts +45 -0
  60. package/dist/page-cache.d.ts.map +1 -0
  61. package/dist/page-cache.js +334 -0
  62. package/dist/page-cache.js.map +1 -0
  63. package/dist/source.d.ts +22 -0
  64. package/dist/source.d.ts.map +1 -0
  65. package/dist/source.js +31 -0
  66. package/dist/source.js.map +1 -0
  67. package/dist/text-decoding-multibyte.d.ts +17 -0
  68. package/dist/text-decoding-multibyte.d.ts.map +1 -0
  69. package/dist/text-decoding-multibyte.js +448 -0
  70. package/dist/text-decoding-multibyte.js.map +1 -0
  71. package/dist/text-decoding.d.ts +45 -0
  72. package/dist/text-decoding.d.ts.map +1 -0
  73. package/dist/text-decoding.js +106 -0
  74. package/dist/text-decoding.js.map +1 -0
  75. package/dist/types.d.ts +15 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +10 -0
  78. package/dist/types.js.map +1 -0
  79. package/dist/use-hex-document-state.d.ts +10 -0
  80. package/dist/use-hex-document-state.d.ts.map +1 -0
  81. package/dist/use-hex-document-state.js +22 -0
  82. package/dist/use-hex-document-state.js.map +1 -0
  83. package/package.json +53 -3
  84. package/styles.css +456 -0
@@ -0,0 +1,334 @@
1
+ function abortError(signal) {
2
+ return signal.reason ?? new DOMException("Aborted", "AbortError");
3
+ }
4
+ export function createPageCache(source, { pageSize = 65536, maxPages = 256, onError } = {}) {
5
+ // Unknown until the first read: a source that returns a Uint8Array rather
6
+ // than a promise is in memory, and caching it would only copy it.
7
+ let sync;
8
+ const pages = new Map();
9
+ const flights = new Map();
10
+ const errors = new Set();
11
+ const listeners = new Set();
12
+ let wanted;
13
+ let ver = 0;
14
+ let unsubscribeSource;
15
+ const notify = () => {
16
+ ver++;
17
+ for (const listener of listeners)
18
+ listener();
19
+ };
20
+ const pageCount = () => Math.ceil(source.size / pageSize);
21
+ // A read can run during render (a probe from `get`), so the error report
22
+ // waits for a microtask instead of calling into the app from there.
23
+ const fail = (page, error) => {
24
+ errors.add(page);
25
+ queueMicrotask(() => {
26
+ onError?.(error, page * pageSize);
27
+ notify();
28
+ });
29
+ };
30
+ /** Reads `page`; a sync source's bytes come back at once and are not stored. */
31
+ const fetchPage = (page, requested) => {
32
+ const start = page * pageSize;
33
+ const length = Math.min(pageSize, source.size - start);
34
+ if (length <= 0)
35
+ return { bytes: new Uint8Array(0) };
36
+ const controller = new AbortController();
37
+ let result;
38
+ try {
39
+ result = source.read(start, length, controller.signal);
40
+ }
41
+ catch (error) {
42
+ fail(page, error);
43
+ return { error };
44
+ }
45
+ if (result instanceof Uint8Array) {
46
+ sync = true;
47
+ errors.delete(page);
48
+ return { bytes: result };
49
+ }
50
+ sync = false;
51
+ const flight = { controller, waiters: 0, requested };
52
+ flight.promise = result.then((bytes) => {
53
+ if (flights.get(page) === flight) {
54
+ flights.delete(page);
55
+ pages.set(page, bytes);
56
+ while (pages.size > maxPages) {
57
+ pages.delete(pages.keys().next().value);
58
+ }
59
+ notify();
60
+ }
61
+ return bytes;
62
+ }, (error) => {
63
+ if (flights.get(page) === flight) {
64
+ flights.delete(page);
65
+ fail(page, error);
66
+ }
67
+ throw error;
68
+ });
69
+ // `load`'s callers get the rejection; with none, it would go unhandled.
70
+ flight.promise.catch(() => { });
71
+ flights.set(page, flight);
72
+ errors.delete(page);
73
+ return { flight };
74
+ };
75
+ /** A direct read from a source that has answered synchronously so far. */
76
+ const readSync = (offset, length) => {
77
+ const page = Math.floor(offset / pageSize);
78
+ if (errors.has(page))
79
+ return undefined;
80
+ let result;
81
+ try {
82
+ result = source.read(offset, length);
83
+ }
84
+ catch (error) {
85
+ fail(page, error);
86
+ return undefined;
87
+ }
88
+ if (result instanceof Uint8Array)
89
+ return result;
90
+ // A source may answer from memory for some ranges and asynchronously for
91
+ // others (an edited document over a remote file); from here on it pages.
92
+ result.catch(() => { });
93
+ sync = false;
94
+ return undefined;
95
+ };
96
+ const cachedPage = (page) => {
97
+ const bytes = pages.get(page);
98
+ if (bytes) {
99
+ pages.delete(page);
100
+ pages.set(page, bytes);
101
+ }
102
+ return bytes;
103
+ };
104
+ const abort = (page) => {
105
+ const flight = flights.get(page);
106
+ if (!flight)
107
+ return;
108
+ flights.delete(page);
109
+ flight.controller.abort();
110
+ };
111
+ const loadRange = async (offset, end, first, signal) => {
112
+ const last = Math.floor((end - 1) / pageSize);
113
+ const loads = [];
114
+ for (let page = first; page <= last; page++) {
115
+ loads.push(cache.load(page, signal));
116
+ }
117
+ const loaded = await Promise.all(loads);
118
+ if (first === last) {
119
+ const at = offset - first * pageSize;
120
+ return loaded[0].subarray(at, at + end - offset);
121
+ }
122
+ const out = new Uint8Array(end - offset);
123
+ loaded.forEach((bytes, i) => {
124
+ const pageStart = (first + i) * pageSize;
125
+ const from = Math.max(offset, pageStart) - pageStart;
126
+ const to = Math.min(end, pageStart + bytes.length) - pageStart;
127
+ out.set(bytes.subarray(from, to), pageStart + from - offset);
128
+ });
129
+ return out;
130
+ };
131
+ const cache = {
132
+ pageSize,
133
+ get(offset, length) {
134
+ const end = Math.min(offset + length, source.size);
135
+ if (end <= offset)
136
+ return new Uint8Array(0);
137
+ const first = Math.floor(offset / pageSize);
138
+ const last = Math.floor((end - 1) / pageSize);
139
+ if (sync === undefined && !flights.has(first) && !errors.has(first)) {
140
+ fetchPage(first, true);
141
+ }
142
+ if (sync) {
143
+ const bytes = readSync(offset, end - offset);
144
+ if (bytes || sync)
145
+ return bytes;
146
+ }
147
+ if (first === last) {
148
+ const bytes = cachedPage(first);
149
+ if (!bytes)
150
+ return source.peek?.(offset, end - offset);
151
+ const at = offset - first * pageSize;
152
+ return bytes.subarray(at, at + end - offset);
153
+ }
154
+ const out = new Uint8Array(end - offset);
155
+ for (let page = first; page <= last; page++) {
156
+ const bytes = cachedPage(page);
157
+ if (!bytes)
158
+ return source.peek?.(offset, end - offset);
159
+ const pageStart = page * pageSize;
160
+ const from = Math.max(offset, pageStart) - pageStart;
161
+ const to = Math.min(end, pageStart + bytes.length) - pageStart;
162
+ out.set(bytes.subarray(from, to), pageStart + from - offset);
163
+ }
164
+ return out;
165
+ },
166
+ request(firstPage, lastPage) {
167
+ wanted = [firstPage, lastPage];
168
+ const last = Math.min(lastPage, pageCount() - 1);
169
+ let retried = false;
170
+ for (let page = Math.max(0, firstPage); page <= last; page++) {
171
+ if (sync) {
172
+ // Nothing to load, but a failed range is tried again once it
173
+ // comes back into view.
174
+ retried = errors.delete(page) || retried;
175
+ continue;
176
+ }
177
+ const flight = flights.get(page);
178
+ if (flight)
179
+ flight.requested = true;
180
+ if (pages.has(page) || flight)
181
+ continue;
182
+ fetchPage(page, true);
183
+ }
184
+ if (retried)
185
+ notify();
186
+ },
187
+ retain(firstPage, lastPage) {
188
+ let aborted = false;
189
+ for (const [page, flight] of [...flights]) {
190
+ if (page >= firstPage - 1 && page <= lastPage + 1)
191
+ continue;
192
+ flight.requested = false;
193
+ if (flight.waiters > 0)
194
+ continue;
195
+ abort(page);
196
+ aborted = true;
197
+ }
198
+ // pending() may have just turned false with nothing left to load.
199
+ if (aborted)
200
+ notify();
201
+ },
202
+ status(page) {
203
+ if (pages.has(page))
204
+ return "ready";
205
+ if (flights.has(page))
206
+ return "loading";
207
+ if (errors.has(page))
208
+ return "error";
209
+ return sync ? "ready" : "idle";
210
+ },
211
+ pending: () => flights.size > 0,
212
+ // The source is watched only while someone watches the cache, so a cache
213
+ // dropped by an unmounted view leaves no listener behind on the source.
214
+ subscribe(listener) {
215
+ listeners.add(listener);
216
+ if (listeners.size === 1) {
217
+ unsubscribeSource = source.subscribe?.(() => cache.invalidate());
218
+ }
219
+ return () => {
220
+ if (!listeners.delete(listener) || listeners.size > 0)
221
+ return;
222
+ unsubscribeSource?.();
223
+ unsubscribeSource = undefined;
224
+ for (const [page, flight] of [...flights]) {
225
+ flight.requested = false;
226
+ if (flight.waiters === 0)
227
+ abort(page);
228
+ }
229
+ };
230
+ },
231
+ version: () => ver,
232
+ invalidate() {
233
+ for (const page of [...flights.keys()])
234
+ abort(page);
235
+ pages.clear();
236
+ errors.clear();
237
+ if (wanted)
238
+ cache.request(wanted[0], wanted[1]);
239
+ notify();
240
+ },
241
+ load(page, signal) {
242
+ if (signal?.aborted)
243
+ return Promise.reject(abortError(signal));
244
+ const cached = cachedPage(page);
245
+ if (cached)
246
+ return Promise.resolve(cached);
247
+ let flight = flights.get(page);
248
+ if (!flight) {
249
+ const fetched = fetchPage(page, false);
250
+ if ("bytes" in fetched)
251
+ return Promise.resolve(fetched.bytes);
252
+ if ("error" in fetched)
253
+ return Promise.reject(fetched.error);
254
+ flight = fetched.flight;
255
+ }
256
+ const shared = flight;
257
+ shared.waiters++;
258
+ return new Promise((resolve, reject) => {
259
+ let done = false;
260
+ const finish = () => {
261
+ done = true;
262
+ shared.waiters--;
263
+ signal?.removeEventListener("abort", onAbort);
264
+ };
265
+ const onAbort = () => {
266
+ if (done)
267
+ return;
268
+ finish();
269
+ reject(abortError(signal));
270
+ if (flights.get(page) === shared &&
271
+ shared.waiters === 0 &&
272
+ !shared.requested) {
273
+ abort(page);
274
+ notify();
275
+ }
276
+ };
277
+ signal?.addEventListener("abort", onAbort, { once: true });
278
+ shared.promise.then((bytes) => {
279
+ if (done)
280
+ return;
281
+ finish();
282
+ resolve(bytes);
283
+ }, (error) => {
284
+ if (done)
285
+ return;
286
+ finish();
287
+ reject(error);
288
+ });
289
+ });
290
+ },
291
+ read(offset, length, signal) {
292
+ const end = Math.min(offset + length, source.size);
293
+ if (end <= offset)
294
+ return new Uint8Array(0);
295
+ const first = Math.floor(offset / pageSize);
296
+ if (sync === undefined) {
297
+ if (signal?.aborted)
298
+ return Promise.reject(abortError(signal));
299
+ const fetched = flights.has(first)
300
+ ? undefined
301
+ : fetchPage(first, false);
302
+ if (fetched && "error" in fetched) {
303
+ // The page can fail where the range would not (a bad region
304
+ // elsewhere in it), so the range alone decides; and while the kind
305
+ // is unknown, a throw is reported the way every caller handles.
306
+ errors.delete(first);
307
+ let result;
308
+ try {
309
+ result = source.read(offset, end - offset, signal);
310
+ }
311
+ catch (error) {
312
+ return Promise.reject(error);
313
+ }
314
+ sync = result instanceof Uint8Array;
315
+ return result;
316
+ }
317
+ }
318
+ if (sync) {
319
+ const result = source.read(offset, end - offset, signal);
320
+ // Mixed sources page from here on, as in `get`.
321
+ if (!(result instanceof Uint8Array))
322
+ sync = false;
323
+ return result;
324
+ }
325
+ return loadRange(offset, end, first, signal);
326
+ },
327
+ sync: () => sync,
328
+ async readRange(offset, length, signal) {
329
+ return source.read(offset, length, signal);
330
+ },
331
+ };
332
+ return cache;
333
+ }
334
+ //# sourceMappingURL=page-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-cache.js","sourceRoot":"","sources":["../src/page-cache.ts"],"names":[],"mappings":"AAgEA,SAAS,UAAU,CAAC,MAAmB;IACrC,OAAO,MAAM,CAAC,MAAM,IAAI,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACpE,CAAC;AAID,MAAM,UAAU,eAAe,CAC7B,MAAkB,EAClB,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,GAAG,GAAG,EAAE,OAAO,EAAE,GAAqB,EAAE;IAEpE,0EAA0E;IAC1E,kEAAkE;IAClE,IAAI,IAAyB,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IACxC,IAAI,MAAoC,CAAC;IACzC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,iBAA2C,CAAC;IAEhD,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,GAAG,EAAE,CAAC;QACN,KAAK,MAAM,QAAQ,IAAI,SAAS;YAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAE1D,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,KAAc,EAAE,EAAE;QAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,cAAc,CAAC,GAAG,EAAE;YAClB,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC;YAClC,MAAM,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,gFAAgF;IAChF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,SAAkB,EAAW,EAAE;QAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QACvD,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,MAAwC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,MAAM,YAAY,UAAU,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,GAAG,KAAK,CAAC;QACb,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAY,CAAC;QAC/D,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAC1B,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;gBACjC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACvB,OAAO,KAAK,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;oBAC7B,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC,CAAC;gBACpD,CAAC;gBACD,MAAM,EAAE,CAAC;YACX,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;gBACjC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC,CACF,CAAC;QACF,wEAAwE;QACxE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,MAAc,EAA0B,EAAE;QAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACvC,IAAI,MAAwC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,MAAM,YAAY,UAAU;YAAE,OAAO,MAAM,CAAC;QAChD,yEAAyE;QACzE,yEAAyE;QACzE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,KAAK,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAA0B,EAAE;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EACrB,MAAc,EACd,GAAW,EACX,KAAa,EACb,MAAoB,EACpB,EAAE;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC9C,MAAM,KAAK,GAA0B,EAAE,CAAC;QACxC,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;YACrC,OAAQ,MAAM,CAAC,CAAC,CAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;YACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;YAC/D,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,KAAK,GAAc;QACvB,QAAQ;QAER,GAAG,CAAC,MAAM,EAAE,MAAM;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,GAAG,IAAI,MAAM;gBAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;YAC9C,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;gBAC7C,IAAI,KAAK,IAAI,IAAI;oBAAE,OAAO,KAAK,CAAC;YAClC,CAAC;YACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,CAAC,KAAK;oBAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;gBACvD,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;gBACrC,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;YACzC,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK;oBAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;gBACvD,MAAM,SAAS,GAAG,IAAI,GAAG,QAAQ,CAAC;gBAClC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;gBACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;gBAC/D,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,CAAC,SAAS,EAAE,QAAQ;YACzB,MAAM,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC7D,IAAI,IAAI,EAAE,CAAC;oBACT,6DAA6D;oBAC7D,wBAAwB;oBACxB,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC;oBACzC,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,MAAM;oBAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;gBACpC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM;oBAAE,SAAS;gBACxC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;YACD,IAAI,OAAO;gBAAE,MAAM,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,CAAC,SAAS,EAAE,QAAQ;YACxB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;gBAC1C,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC,IAAI,IAAI,IAAI,QAAQ,GAAG,CAAC;oBAAE,SAAS;gBAC5D,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;gBACzB,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC;oBAAE,SAAS;gBACjC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACZ,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,kEAAkE;YAClE,IAAI,OAAO;gBAAE,MAAM,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,CAAC,IAAI;YACT,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,OAAO,CAAC;YACpC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACxC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,OAAO,CAAC;YACrC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACjC,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;QAE/B,yEAAyE;QACzE,wEAAwE;QACxE,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACzB,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC;oBAAE,OAAO;gBAC9D,iBAAiB,EAAE,EAAE,CAAC;gBACtB,iBAAiB,GAAG,SAAS,CAAC;gBAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;oBAC1C,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;oBACzB,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;wBAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG;QAElB,UAAU;YACR,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,MAAM;gBAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC;QACX,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,MAAM;YACf,IAAI,MAAM,EAAE,OAAO;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,MAAM;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACvC,IAAI,OAAO,IAAI,OAAO;oBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC9D,IAAI,OAAO,IAAI,OAAO;oBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC7D,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC1B,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC;YACtB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACjD,IAAI,IAAI,GAAG,KAAK,CAAC;gBACjB,MAAM,MAAM,GAAG,GAAG,EAAE;oBAClB,IAAI,GAAG,IAAI,CAAC;oBACZ,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAChD,CAAC,CAAC;gBACF,MAAM,OAAO,GAAG,GAAG,EAAE;oBACnB,IAAI,IAAI;wBAAE,OAAO;oBACjB,MAAM,EAAE,CAAC;oBACT,MAAM,CAAC,UAAU,CAAC,MAAqB,CAAC,CAAC,CAAC;oBAC1C,IACE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM;wBAC5B,MAAM,CAAC,OAAO,KAAK,CAAC;wBACpB,CAAC,MAAM,CAAC,SAAS,EACjB,CAAC;wBACD,KAAK,CAAC,IAAI,CAAC,CAAC;wBACZ,MAAM,EAAE,CAAC;oBACX,CAAC;gBACH,CAAC,CAAC;gBACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,MAAM,CAAC,OAAO,CAAC,IAAI,CACjB,CAAC,KAAK,EAAE,EAAE;oBACR,IAAI,IAAI;wBAAE,OAAO;oBACjB,MAAM,EAAE,CAAC;oBACT,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;oBACjB,IAAI,IAAI;wBAAE,OAAO;oBACjB,MAAM,EAAE,CAAC;oBACT,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,GAAG,IAAI,MAAM;gBAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;YAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,MAAM,EAAE,OAAO;oBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBAChC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC5B,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;oBAClC,4DAA4D;oBAC5D,mEAAmE;oBACnE,gEAAgE;oBAChE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACrB,IAAI,MAAwC,CAAC;oBAC7C,IAAI,CAAC;wBACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;oBACrD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC/B,CAAC;oBACD,IAAI,GAAG,MAAM,YAAY,UAAU,CAAC;oBACpC,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;gBACzD,gDAAgD;gBAChD,IAAI,CAAC,CAAC,MAAM,YAAY,UAAU,CAAC;oBAAE,IAAI,GAAG,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,OAAO,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI;QAEhB,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM;YACpC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface ByteSource {
2
+ /** Total length in bytes; at most Number.MAX_SAFE_INTEGER. Read again after every change notification. */
3
+ readonly size: number;
4
+ /** Exactly min(length, size - offset) bytes. Sync for in-memory sources, a promise otherwise. */
5
+ read(offset: number, length: number, signal?: AbortSignal): Uint8Array | Promise<Uint8Array>;
6
+ /**
7
+ * The bytes when they are at hand with no I/O, else `undefined`; never
8
+ * starts a read. A view redraws from it after an edit instead of
9
+ * flashing placeholders while it re-reads pages the source already has.
10
+ */
11
+ peek?(offset: number, length: number): Uint8Array | undefined;
12
+ /** Content or size changed: the view drops its cache and re-reads what is visible. */
13
+ subscribe?(onChange: () => void): () => void;
14
+ }
15
+ /** A sync source over `bytes`; reads are subarrays, never copies. */
16
+ export declare function bytesSource(bytes: Uint8Array): ByteSource & {
17
+ readonly bytes: Uint8Array;
18
+ };
19
+ export declare function blobSource(blob: Blob): ByteSource & {
20
+ readonly blob: Blob;
21
+ };
22
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,0GAA0G;IAC1G,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iGAAiG;IACjG,IAAI,CACF,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC;;;;OAIG;IACH,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9D,sFAAsF;IACtF,SAAS,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC9C;AAOD,qEAAqE;AACrE,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,GAChB,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAM7C;AAMD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAY3E"}
package/dist/source.js ADDED
@@ -0,0 +1,31 @@
1
+ function clampRange(offset, length, size) {
2
+ const start = Math.min(Math.max(0, offset), size);
3
+ return [start, Math.min(size, start + Math.max(0, length))];
4
+ }
5
+ /** A sync source over `bytes`; reads are subarrays, never copies. */
6
+ export function bytesSource(bytes) {
7
+ const read = (offset, length) => {
8
+ const [start, end] = clampRange(offset, length, bytes.length);
9
+ return bytes.subarray(start, end);
10
+ };
11
+ return { bytes, size: bytes.length, read, peek: read };
12
+ }
13
+ function abortError(signal) {
14
+ return signal.reason ?? new DOMException("Aborted", "AbortError");
15
+ }
16
+ export function blobSource(blob) {
17
+ return {
18
+ blob,
19
+ size: blob.size,
20
+ async read(offset, length, signal) {
21
+ if (signal?.aborted)
22
+ throw abortError(signal);
23
+ const [start, end] = clampRange(offset, length, blob.size);
24
+ const buffer = await blob.slice(start, end).arrayBuffer();
25
+ if (signal?.aborted)
26
+ throw abortError(signal);
27
+ return new Uint8Array(buffer);
28
+ },
29
+ };
30
+ }
31
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAmBA,SAAS,UAAU,CAAC,MAAc,EAAE,MAAc,EAAE,IAAY;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAU,CAAC;AACvE,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,WAAW,CACzB,KAAiB;IAEjB,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE;QAC9C,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB;IACrC,OAAO,MAAM,CAAC,MAAM,IAAI,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM;YAC/B,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1D,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type TextDecoding } from "./text-decoding.ts";
2
+ export type EastAsianEncoding = "shift_jis" | "euc-jp" | "gb18030" | "big5" | "euc-kr";
3
+ /**
4
+ * Test instrumentation, not exported from the package: `decodes` counts
5
+ * `TextDecoder` calls, `overruns` counts candidates that ran past a window end
6
+ * that still had its full lookahead, which the lookahead rules make impossible.
7
+ */
8
+ export declare const multibyteProbe: {
9
+ decodes: number;
10
+ overruns: number;
11
+ };
12
+ export declare const utf8Decoding: TextDecoding;
13
+ export declare function utf16Decoding(littleEndian: boolean): TextDecoding;
14
+ /** Test access to an East Asian decoding's reverse map, building it if needed. */
15
+ export declare function reverseMapOf(decoding: TextDecoding): ReadonlyMap<number, number> | undefined;
16
+ export declare function eastAsianDecoding(id: EastAsianEncoding): TextDecoding;
17
+ //# sourceMappingURL=text-decoding-multibyte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-decoding-multibyte.d.ts","sourceRoot":"","sources":["../src/text-decoding-multibyte.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,CAAC;AAEb;;;;GAIG;AACH,eAAO,MAAM,cAAc;IAAK,OAAO;IAAK,QAAQ;CAAK,CAAC;AA+M1D,eAAO,MAAM,YAAY,EAAE,YAG1B,CAAC;AAOF,wBAAgB,aAAa,CAAC,YAAY,EAAE,OAAO,GAAG,YAAY,CA4CjE;AAiMD,kFAAkF;AAClF,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,YAAY,GACrB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAEzC;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,iBAAiB,GAAG,YAAY,CAgErE"}