diff --git a/package.json b/package.json index 0a288b3d..85d33517 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,10 @@ "types": "./dist/index.d.ts", "default": "./dist/index.js" }, + "./WebWritableStream": { + "types": "./dist/WebWritableStream.d.ts", + "default": "./dist/WebWritableStream.js" + }, "./WritableStream": { "types": "./dist/WritableStream.d.ts", "default": "./dist/WritableStream.js" diff --git a/src/WebWritableStream.spec.ts b/src/WebWritableStream.spec.ts new file mode 100644 index 00000000..9aa5e6d2 --- /dev/null +++ b/src/WebWritableStream.spec.ts @@ -0,0 +1,143 @@ +import * as fs from "node:fs/promises"; +import { describe, expect, it, vi } from "vitest"; +import * as helper from "./__fixtures__/testHelper.js"; +import type { Handler, ParserOptions } from "./Parser.js"; +import { WebWritableStream } from "./WebWritableStream.js"; + +describe("WebWritableStream", () => { + it("should decode fragmented unicode characters", async () => { + const ontext = vi.fn(); + const stream = new WebWritableStream({ ontext }); + + const writer = stream.getWriter(); + // € is U+20AC, encoded as 0xE2 0x82 0xAC in UTF-8 + await writer.write(new Uint8Array([0xe2, 0x82])); + await writer.write(new Uint8Array([0xac])); + await writer.write(""); + await writer.close(); + + expect(ontext).toHaveBeenCalledWith("€"); + }); + + it("should handle string chunks", async () => { + const ontext = vi.fn(); + const stream = new WebWritableStream({ ontext }); + + const writer = stream.getWriter(); + await writer.write("hello"); + await writer.close(); + + expect(ontext).toHaveBeenCalledWith("hello"); + }); + + it("should handle empty stream", async () => { + const onend = vi.fn(); + const stream = new WebWritableStream({ onend }); + + const writer = stream.getWriter(); + await writer.close(); + + expect(onend).toHaveBeenCalledTimes(1); + }); + + it("should handle abort signal", async () => { + const ontext = vi.fn(); + const onend = vi.fn(); + const stream = new WebWritableStream({ ontext, onend }); + + const writer = stream.getWriter(); + await writer.abort(new Error("aborted")); + + expect(ontext).not.toHaveBeenCalled(); + expect(onend).not.toHaveBeenCalled(); + }); + + it("should work with ReadableStream.pipeTo", async () => { + const onopentag = vi.fn(); + const ontext = vi.fn(); + const stream = new WebWritableStream({ onopentag, ontext }); + + const html = "
hello
"; + const readable = new ReadableStream({ + start(controller) { + controller.enqueue(html); + controller.close(); + }, + }); + + await readable.pipeTo(stream); + + expect(onopentag).toHaveBeenCalledWith("div", {}, false); + expect(ontext).toHaveBeenCalledWith("hello"); + }); + + it("Basic html", () => testStream("Basic.html")); + it("Attributes", () => testStream("Attributes.html")); + it("SVG", () => testStream("Svg.html")); + it("RSS feed", () => testStream("RSS_Example.xml", { xmlMode: true })); + it("Atom feed", () => testStream("Atom_Example.xml", { xmlMode: true })); + it("RDF feed", () => testStream("RDF_Example.xml", { xmlMode: true })); +}); + +function getPromiseEventCollector(): [ + handler: Partial, + promise: Promise, +] { + let handler: Partial | undefined; + const promise = new Promise((resolve, reject) => { + handler = helper.getEventCollector((error, events) => { + if (error) { + reject(error); + } else { + resolve(events); + } + }); + }); + + if (!handler) { + throw new Error("Failed to initialize event handler"); + } + + return [handler, promise]; +} + +async function testStream( + file: string, + options?: ParserOptions, +): Promise { + const filePath = new URL(`__fixtures__/Documents/${file}`, import.meta.url); + + const [streamHandler, eventsPromise] = getPromiseEventCollector(); + + const fileContents = await fs.readFile(filePath); + + // Pipe file contents through a ReadableStream into the WebWritableStream + const readable = new ReadableStream({ + start(controller) { + controller.enqueue(new Uint8Array(fileContents)); + controller.close(); + }, + }); + + await readable.pipeTo(new WebWritableStream(streamHandler, options)); + + const events = await eventsPromise; + + expect(events).toMatchSnapshot(); + + // Verify single-pass produces identical results + const [singlePassHandler, singlePassPromise] = getPromiseEventCollector(); + + const singlePassReadable = new ReadableStream({ + start(controller) { + controller.enqueue(fileContents.toString()); + controller.close(); + }, + }); + + await singlePassReadable.pipeTo( + new WebWritableStream(singlePassHandler, options), + ); + + expect(await singlePassPromise).toStrictEqual(events); +} diff --git a/src/WebWritableStream.ts b/src/WebWritableStream.ts new file mode 100644 index 00000000..a2313c12 --- /dev/null +++ b/src/WebWritableStream.ts @@ -0,0 +1,47 @@ +import { type Handler, Parser, type ParserOptions } from "./Parser.js"; + +/** + * WebWritableStream makes the `Parser` interface available as a Web Streams API WritableStream. + * + * This is useful for piping `fetch()` response bodies directly into the parser. + * @see Parser + * @example + * ```typescript + * import { WebWritableStream } from "htmlparser2/WebWritableStream"; + * + * const stream = new WebWritableStream({ + * onopentag(name, attribs) { + * console.log("Opened:", name); + * }, + * }); + * + * const response = await fetch("https://example.com"); + * await response.body.pipeTo(stream); + * ``` + */ +// eslint-disable-next-line n/no-unsupported-features/node-builtins -- Web Streams API; requires a runtime with WritableStream (browsers, Deno, Node ≥18.0) +export class WebWritableStream extends WritableStream { + constructor(cbs: Partial, options?: ParserOptions) { + const parser = new Parser(cbs, options); + const decoder = new TextDecoder(); + const streamOption: TextDecodeOptions = { stream: true }; + + super({ + write(chunk) { + parser.write( + typeof chunk === "string" + ? chunk + : decoder.decode(chunk, streamOption), + ); + }, + close() { + // Flush any remaining bytes in the decoder + const remaining = decoder.decode(); + if (remaining) { + parser.write(remaining); + } + parser.end(); + }, + }); + } +} diff --git a/src/__snapshots__/WebWritableStream.spec.ts.snap b/src/__snapshots__/WebWritableStream.spec.ts.snap new file mode 100644 index 00000000..3012e435 --- /dev/null +++ b/src/__snapshots__/WebWritableStream.spec.ts.snap @@ -0,0 +1,5809 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`WebWritableStream > Atom feed 1`] = ` +[ + { + "$event": "processinginstruction", + "data": [ + "?xml", + "?xml version="1.0" encoding="utf-8"", + ], + "endIndex": 36, + "startIndex": 0, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 38, + "startIndex": 37, + }, + { + "$event": "comment", + "data": [ + " http://en.wikipedia.org/wiki/Atom_%28standard%29 ", + ], + "endIndex": 95, + "startIndex": 39, + }, + { + "$event": "commentend", + "data": [], + "endIndex": 95, + "startIndex": 39, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 96, + "startIndex": 96, + }, + { + "$event": "opentagname", + "data": [ + "feed", + ], + "endIndex": 102, + "startIndex": 97, + }, + { + "$event": "attribute", + "data": [ + "xmlns", + "http://www.w3.org/2005/Atom", + """, + ], + "endIndex": 138, + "startIndex": 103, + }, + { + "$event": "opentag", + "data": [ + "feed", + { + "xmlns": "http://www.w3.org/2005/Atom", + }, + false, + ], + "endIndex": 138, + "startIndex": 97, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 140, + "startIndex": 139, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 147, + "startIndex": 141, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 147, + "startIndex": 141, + }, + { + "$event": "text", + "data": [ + "Example Feed", + ], + "endIndex": 159, + "startIndex": 148, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 167, + "startIndex": 160, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 169, + "startIndex": 168, + }, + { + "$event": "opentagname", + "data": [ + "subtitle", + ], + "endIndex": 179, + "startIndex": 170, + }, + { + "$event": "opentag", + "data": [ + "subtitle", + {}, + false, + ], + "endIndex": 179, + "startIndex": 170, + }, + { + "$event": "text", + "data": [ + "A subtitle.", + ], + "endIndex": 190, + "startIndex": 180, + }, + { + "$event": "closetag", + "data": [ + "subtitle", + false, + ], + "endIndex": 201, + "startIndex": 191, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 203, + "startIndex": 202, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 209, + "startIndex": 204, + }, + { + "$event": "attribute", + "data": [ + "href", + "http://example.org/feed/", + """, + ], + "endIndex": 241, + "startIndex": 210, + }, + { + "$event": "attribute", + "data": [ + "rel", + "self", + """, + ], + "endIndex": 252, + "startIndex": 242, + }, + { + "$event": "opentag", + "data": [ + "link", + { + "href": "http://example.org/feed/", + "rel": "self", + }, + false, + ], + "endIndex": 254, + "startIndex": 204, + }, + { + "$event": "closetag", + "data": [ + "link", + true, + ], + "endIndex": 254, + "startIndex": 204, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 256, + "startIndex": 255, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 262, + "startIndex": 257, + }, + { + "$event": "attribute", + "data": [ + "href", + "http://example.org/", + """, + ], + "endIndex": 289, + "startIndex": 263, + }, + { + "$event": "opentag", + "data": [ + "link", + { + "href": "http://example.org/", + }, + false, + ], + "endIndex": 291, + "startIndex": 257, + }, + { + "$event": "closetag", + "data": [ + "link", + true, + ], + "endIndex": 291, + "startIndex": 257, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 293, + "startIndex": 292, + }, + { + "$event": "opentagname", + "data": [ + "id", + ], + "endIndex": 297, + "startIndex": 294, + }, + { + "$event": "opentag", + "data": [ + "id", + {}, + false, + ], + "endIndex": 297, + "startIndex": 294, + }, + { + "$event": "text", + "data": [ + "urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6", + ], + "endIndex": 342, + "startIndex": 298, + }, + { + "$event": "closetag", + "data": [ + "id", + false, + ], + "endIndex": 347, + "startIndex": 343, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 349, + "startIndex": 348, + }, + { + "$event": "opentagname", + "data": [ + "updated", + ], + "endIndex": 358, + "startIndex": 350, + }, + { + "$event": "opentag", + "data": [ + "updated", + {}, + false, + ], + "endIndex": 358, + "startIndex": 350, + }, + { + "$event": "text", + "data": [ + "2003-12-13T18:30:02Z", + ], + "endIndex": 378, + "startIndex": 359, + }, + { + "$event": "closetag", + "data": [ + "updated", + false, + ], + "endIndex": 388, + "startIndex": 379, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 390, + "startIndex": 389, + }, + { + "$event": "opentagname", + "data": [ + "author", + ], + "endIndex": 398, + "startIndex": 391, + }, + { + "$event": "opentag", + "data": [ + "author", + {}, + false, + ], + "endIndex": 398, + "startIndex": 391, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 401, + "startIndex": 399, + }, + { + "$event": "opentagname", + "data": [ + "name", + ], + "endIndex": 407, + "startIndex": 402, + }, + { + "$event": "opentag", + "data": [ + "name", + {}, + false, + ], + "endIndex": 407, + "startIndex": 402, + }, + { + "$event": "text", + "data": [ + "John Doe", + ], + "endIndex": 415, + "startIndex": 408, + }, + { + "$event": "closetag", + "data": [ + "name", + false, + ], + "endIndex": 422, + "startIndex": 416, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 425, + "startIndex": 423, + }, + { + "$event": "opentagname", + "data": [ + "email", + ], + "endIndex": 432, + "startIndex": 426, + }, + { + "$event": "opentag", + "data": [ + "email", + {}, + false, + ], + "endIndex": 432, + "startIndex": 426, + }, + { + "$event": "text", + "data": [ + "johndoe@example.com", + ], + "endIndex": 451, + "startIndex": 433, + }, + { + "$event": "closetag", + "data": [ + "email", + false, + ], + "endIndex": 459, + "startIndex": 452, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 461, + "startIndex": 460, + }, + { + "$event": "closetag", + "data": [ + "author", + false, + ], + "endIndex": 470, + "startIndex": 462, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 473, + "startIndex": 471, + }, + { + "$event": "opentagname", + "data": [ + "entry", + ], + "endIndex": 480, + "startIndex": 474, + }, + { + "$event": "opentag", + "data": [ + "entry", + {}, + false, + ], + "endIndex": 480, + "startIndex": 474, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 483, + "startIndex": 481, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 490, + "startIndex": 484, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 490, + "startIndex": 484, + }, + { + "$event": "text", + "data": [ + "Atom-Powered Robots Run Amok", + ], + "endIndex": 518, + "startIndex": 491, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 526, + "startIndex": 519, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 529, + "startIndex": 527, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 535, + "startIndex": 530, + }, + { + "$event": "attribute", + "data": [ + "href", + "http://example.org/2003/12/13/atom03", + """, + ], + "endIndex": 579, + "startIndex": 536, + }, + { + "$event": "opentag", + "data": [ + "link", + { + "href": "http://example.org/2003/12/13/atom03", + }, + false, + ], + "endIndex": 581, + "startIndex": 530, + }, + { + "$event": "closetag", + "data": [ + "link", + true, + ], + "endIndex": 581, + "startIndex": 530, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 584, + "startIndex": 582, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 590, + "startIndex": 585, + }, + { + "$event": "attribute", + "data": [ + "rel", + "alternate", + """, + ], + "endIndex": 606, + "startIndex": 591, + }, + { + "$event": "attribute", + "data": [ + "type", + "text/html", + """, + ], + "endIndex": 623, + "startIndex": 607, + }, + { + "$event": "attribute", + "data": [ + "href", + "http://example.org/2003/12/13/atom03.html", + """, + ], + "endIndex": 672, + "startIndex": 624, + }, + { + "$event": "opentag", + "data": [ + "link", + { + "href": "http://example.org/2003/12/13/atom03.html", + "rel": "alternate", + "type": "text/html", + }, + false, + ], + "endIndex": 673, + "startIndex": 585, + }, + { + "$event": "closetag", + "data": [ + "link", + true, + ], + "endIndex": 673, + "startIndex": 585, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 676, + "startIndex": 674, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 682, + "startIndex": 677, + }, + { + "$event": "attribute", + "data": [ + "rel", + "edit", + """, + ], + "endIndex": 693, + "startIndex": 683, + }, + { + "$event": "attribute", + "data": [ + "href", + "http://example.org/2003/12/13/atom03/edit", + """, + ], + "endIndex": 742, + "startIndex": 694, + }, + { + "$event": "opentag", + "data": [ + "link", + { + "href": "http://example.org/2003/12/13/atom03/edit", + "rel": "edit", + }, + false, + ], + "endIndex": 743, + "startIndex": 677, + }, + { + "$event": "closetag", + "data": [ + "link", + true, + ], + "endIndex": 743, + "startIndex": 677, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 746, + "startIndex": 744, + }, + { + "$event": "opentagname", + "data": [ + "id", + ], + "endIndex": 750, + "startIndex": 747, + }, + { + "$event": "opentag", + "data": [ + "id", + {}, + false, + ], + "endIndex": 750, + "startIndex": 747, + }, + { + "$event": "text", + "data": [ + "urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a", + ], + "endIndex": 795, + "startIndex": 751, + }, + { + "$event": "closetag", + "data": [ + "id", + false, + ], + "endIndex": 800, + "startIndex": 796, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 803, + "startIndex": 801, + }, + { + "$event": "opentagname", + "data": [ + "updated", + ], + "endIndex": 812, + "startIndex": 804, + }, + { + "$event": "opentag", + "data": [ + "updated", + {}, + false, + ], + "endIndex": 812, + "startIndex": 804, + }, + { + "$event": "text", + "data": [ + "2003-12-13T18:30:02Z", + ], + "endIndex": 832, + "startIndex": 813, + }, + { + "$event": "closetag", + "data": [ + "updated", + false, + ], + "endIndex": 842, + "startIndex": 833, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 845, + "startIndex": 843, + }, + { + "$event": "opentagname", + "data": [ + "content", + ], + "endIndex": 854, + "startIndex": 846, + }, + { + "$event": "attribute", + "data": [ + "type", + "html", + """, + ], + "endIndex": 866, + "startIndex": 855, + }, + { + "$event": "opentag", + "data": [ + "content", + { + "type": "html", + }, + false, + ], + "endIndex": 866, + "startIndex": 846, + }, + { + "$event": "opentagname", + "data": [ + "p", + ], + "endIndex": 869, + "startIndex": 867, + }, + { + "$event": "opentag", + "data": [ + "p", + {}, + false, + ], + "endIndex": 869, + "startIndex": 867, + }, + { + "$event": "text", + "data": [ + "Some content.", + ], + "endIndex": 882, + "startIndex": 870, + }, + { + "$event": "closetag", + "data": [ + "p", + false, + ], + "endIndex": 886, + "startIndex": 883, + }, + { + "$event": "closetag", + "data": [ + "content", + false, + ], + "endIndex": 896, + "startIndex": 887, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 898, + "startIndex": 897, + }, + { + "$event": "closetag", + "data": [ + "entry", + false, + ], + "endIndex": 906, + "startIndex": 899, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 909, + "startIndex": 907, + }, + { + "$event": "opentagname", + "data": [ + "entry", + ], + "endIndex": 916, + "startIndex": 910, + }, + { + "$event": "opentag", + "data": [ + "entry", + {}, + false, + ], + "endIndex": 917, + "startIndex": 910, + }, + { + "$event": "closetag", + "data": [ + "entry", + true, + ], + "endIndex": 917, + "startIndex": 910, + }, + { + "$event": "text", + "data": [ + " + +", + ], + "endIndex": 919, + "startIndex": 918, + }, + { + "$event": "closetag", + "data": [ + "feed", + false, + ], + "endIndex": 926, + "startIndex": 920, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 927, + "startIndex": 927, + }, +] +`; + +exports[`WebWritableStream > Attributes 1`] = ` +[ + { + "$event": "processinginstruction", + "data": [ + "!doctype", + "!doctype html", + ], + "endIndex": 14, + "startIndex": 0, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 15, + "startIndex": 15, + }, + { + "$event": "opentagname", + "data": [ + "html", + ], + "endIndex": 21, + "startIndex": 16, + }, + { + "$event": "opentag", + "data": [ + "html", + {}, + false, + ], + "endIndex": 21, + "startIndex": 16, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 22, + "startIndex": 22, + }, + { + "$event": "opentagname", + "data": [ + "head", + ], + "endIndex": 28, + "startIndex": 23, + }, + { + "$event": "opentag", + "data": [ + "head", + {}, + false, + ], + "endIndex": 28, + "startIndex": 23, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 30, + "startIndex": 29, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 37, + "startIndex": 31, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 37, + "startIndex": 31, + }, + { + "$event": "text", + "data": [ + "Attributes test", + ], + "endIndex": 52, + "startIndex": 38, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 60, + "startIndex": 53, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 61, + "startIndex": 61, + }, + { + "$event": "closetag", + "data": [ + "head", + false, + ], + "endIndex": 68, + "startIndex": 62, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 69, + "startIndex": 69, + }, + { + "$event": "opentagname", + "data": [ + "body", + ], + "endIndex": 75, + "startIndex": 70, + }, + { + "$event": "opentag", + "data": [ + "body", + {}, + false, + ], + "endIndex": 75, + "startIndex": 70, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 77, + "startIndex": 76, + }, + { + "$event": "comment", + "data": [ + " Normal attributes ", + ], + "endIndex": 103, + "startIndex": 78, + }, + { + "$event": "commentend", + "data": [], + "endIndex": 103, + "startIndex": 78, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 105, + "startIndex": 104, + }, + { + "$event": "opentagname", + "data": [ + "button", + ], + "endIndex": 113, + "startIndex": 106, + }, + { + "$event": "attribute", + "data": [ + "id", + "test0", + """, + ], + "endIndex": 124, + "startIndex": 114, + }, + { + "$event": "attribute", + "data": [ + "class", + "value0", + """, + ], + "endIndex": 139, + "startIndex": 125, + }, + { + "$event": "attribute", + "data": [ + "title", + "value1", + """, + ], + "endIndex": 154, + "startIndex": 140, + }, + { + "$event": "opentag", + "data": [ + "button", + { + "class": "value0", + "id": "test0", + "title": "value1", + }, + false, + ], + "endIndex": 154, + "startIndex": 106, + }, + { + "$event": "text", + "data": [ + "class="value0" title="value1"", + ], + "endIndex": 183, + "startIndex": 155, + }, + { + "$event": "closetag", + "data": [ + "button", + false, + ], + "endIndex": 192, + "startIndex": 184, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 195, + "startIndex": 193, + }, + { + "$event": "comment", + "data": [ + " Attributes with no quotes or value ", + ], + "endIndex": 238, + "startIndex": 196, + }, + { + "$event": "commentend", + "data": [], + "endIndex": 238, + "startIndex": 196, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 240, + "startIndex": 239, + }, + { + "$event": "opentagname", + "data": [ + "button", + ], + "endIndex": 248, + "startIndex": 241, + }, + { + "$event": "attribute", + "data": [ + "id", + "test1", + """, + ], + "endIndex": 259, + "startIndex": 249, + }, + { + "$event": "attribute", + "data": [ + "class", + "value2", + null, + ], + "endIndex": 272, + "startIndex": 260, + }, + { + "$event": "attribute", + "data": [ + "disabled", + "", + ], + "endIndex": 281, + "startIndex": 273, + }, + { + "$event": "opentag", + "data": [ + "button", + { + "class": "value2", + "disabled": "", + "id": "test1", + }, + false, + ], + "endIndex": 281, + "startIndex": 241, + }, + { + "$event": "text", + "data": [ + "class=value2 disabled", + ], + "endIndex": 302, + "startIndex": 282, + }, + { + "$event": "closetag", + "data": [ + "button", + false, + ], + "endIndex": 311, + "startIndex": 303, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 314, + "startIndex": 312, + }, + { + "$event": "comment", + "data": [ + " Attributes with no space between them. No valid, but accepted by the browser ", + ], + "endIndex": 399, + "startIndex": 315, + }, + { + "$event": "commentend", + "data": [], + "endIndex": 399, + "startIndex": 315, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 401, + "startIndex": 400, + }, + { + "$event": "opentagname", + "data": [ + "button", + ], + "endIndex": 409, + "startIndex": 402, + }, + { + "$event": "attribute", + "data": [ + "id", + "test2", + """, + ], + "endIndex": 420, + "startIndex": 410, + }, + { + "$event": "attribute", + "data": [ + "class", + "value4", + """, + ], + "endIndex": 435, + "startIndex": 421, + }, + { + "$event": "attribute", + "data": [ + "title", + "value5", + """, + ], + "endIndex": 449, + "startIndex": 435, + }, + { + "$event": "opentag", + "data": [ + "button", + { + "class": "value4", + "id": "test2", + "title": "value5", + }, + false, + ], + "endIndex": 449, + "startIndex": 402, + }, + { + "$event": "text", + "data": [ + "class="value4"title="value5"", + ], + "endIndex": 477, + "startIndex": 450, + }, + { + "$event": "closetag", + "data": [ + "button", + false, + ], + "endIndex": 486, + "startIndex": 478, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 487, + "startIndex": 487, + }, + { + "$event": "closetag", + "data": [ + "body", + false, + ], + "endIndex": 494, + "startIndex": 488, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 495, + "startIndex": 495, + }, + { + "$event": "closetag", + "data": [ + "html", + false, + ], + "endIndex": 502, + "startIndex": 496, + }, +] +`; + +exports[`WebWritableStream > Basic html 1`] = ` +[ + { + "$event": "processinginstruction", + "data": [ + "!doctype", + "!DOCTYPE html", + ], + "endIndex": 14, + "startIndex": 0, + }, + { + "$event": "opentagname", + "data": [ + "html", + ], + "endIndex": 20, + "startIndex": 15, + }, + { + "$event": "opentag", + "data": [ + "html", + {}, + false, + ], + "endIndex": 20, + "startIndex": 15, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 27, + "startIndex": 21, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 27, + "startIndex": 21, + }, + { + "$event": "text", + "data": [ + "The Title", + ], + "endIndex": 36, + "startIndex": 28, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 44, + "startIndex": 37, + }, + { + "$event": "opentagname", + "data": [ + "body", + ], + "endIndex": 50, + "startIndex": 45, + }, + { + "$event": "opentag", + "data": [ + "body", + {}, + false, + ], + "endIndex": 50, + "startIndex": 45, + }, + { + "$event": "text", + "data": [ + "Hello world", + ], + "endIndex": 61, + "startIndex": 51, + }, + { + "$event": "closetag", + "data": [ + "body", + false, + ], + "endIndex": 68, + "startIndex": 62, + }, + { + "$event": "closetag", + "data": [ + "html", + false, + ], + "endIndex": 75, + "startIndex": 69, + }, +] +`; + +exports[`WebWritableStream > RDF feed 1`] = ` +[ + { + "$event": "processinginstruction", + "data": [ + "?xml", + "?xml version="1.0" encoding="UTF-8"", + ], + "endIndex": 36, + "startIndex": 0, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 38, + "startIndex": 37, + }, + { + "$event": "opentagname", + "data": [ + "rdf:RDF", + ], + "endIndex": 47, + "startIndex": 39, + }, + { + "$event": "attribute", + "data": [ + "xmlns:rdf", + "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + """, + ], + "endIndex": 103, + "startIndex": 48, + }, + { + "$event": "attribute", + "data": [ + "xmlns", + "http://purl.org/rss/1.0/", + """, + ], + "endIndex": 136, + "startIndex": 104, + }, + { + "$event": "attribute", + "data": [ + "xmlns:ev", + "http://purl.org/rss/1.0/modules/event/", + """, + ], + "endIndex": 186, + "startIndex": 137, + }, + { + "$event": "attribute", + "data": [ + "xmlns:content", + "http://purl.org/rss/1.0/modules/content/", + """, + ], + "endIndex": 243, + "startIndex": 187, + }, + { + "$event": "attribute", + "data": [ + "xmlns:taxo", + "http://purl.org/rss/1.0/modules/taxonomy/", + """, + ], + "endIndex": 298, + "startIndex": 244, + }, + { + "$event": "attribute", + "data": [ + "xmlns:dc", + "http://purl.org/dc/elements/1.1/", + """, + ], + "endIndex": 342, + "startIndex": 299, + }, + { + "$event": "attribute", + "data": [ + "xmlns:syn", + "http://purl.org/rss/1.0/modules/syndication/", + """, + ], + "endIndex": 399, + "startIndex": 343, + }, + { + "$event": "attribute", + "data": [ + "xmlns:dcterms", + "http://purl.org/dc/terms/", + """, + ], + "endIndex": 441, + "startIndex": 400, + }, + { + "$event": "attribute", + "data": [ + "xmlns:admin", + "http://webns.net/mvcb/", + """, + ], + "endIndex": 478, + "startIndex": 442, + }, + { + "$event": "opentag", + "data": [ + "rdf:RDF", + { + "xmlns": "http://purl.org/rss/1.0/", + "xmlns:admin": "http://webns.net/mvcb/", + "xmlns:content": "http://purl.org/rss/1.0/modules/content/", + "xmlns:dc": "http://purl.org/dc/elements/1.1/", + "xmlns:dcterms": "http://purl.org/dc/terms/", + "xmlns:ev": "http://purl.org/rss/1.0/modules/event/", + "xmlns:rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "xmlns:syn": "http://purl.org/rss/1.0/modules/syndication/", + "xmlns:taxo": "http://purl.org/rss/1.0/modules/taxonomy/", + }, + false, + ], + "endIndex": 478, + "startIndex": 39, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 480, + "startIndex": 479, + }, + { + "$event": "opentagname", + "data": [ + "channel", + ], + "endIndex": 489, + "startIndex": 481, + }, + { + "$event": "attribute", + "data": [ + "rdf:about", + "https://github.com/fb55/htmlparser2/", + """, + ], + "endIndex": 538, + "startIndex": 490, + }, + { + "$event": "opentag", + "data": [ + "channel", + { + "rdf:about": "https://github.com/fb55/htmlparser2/", + }, + false, + ], + "endIndex": 538, + "startIndex": 481, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 541, + "startIndex": 539, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 548, + "startIndex": 542, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 548, + "startIndex": 542, + }, + { + "$event": "text", + "data": [ + "A title to parse and remember", + ], + "endIndex": 577, + "startIndex": 549, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 585, + "startIndex": 578, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 588, + "startIndex": 586, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 594, + "startIndex": 589, + }, + { + "$event": "opentag", + "data": [ + "link", + {}, + false, + ], + "endIndex": 594, + "startIndex": 589, + }, + { + "$event": "text", + "data": [ + "https://github.com/fb55/htmlparser2/", + ], + "endIndex": 630, + "startIndex": 595, + }, + { + "$event": "closetag", + "data": [ + "link", + false, + ], + "endIndex": 637, + "startIndex": 631, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 640, + "startIndex": 638, + }, + { + "$event": "opentagname", + "data": [ + "description", + ], + "endIndex": 653, + "startIndex": 641, + }, + { + "$event": "opentag", + "data": [ + "description", + {}, + false, + ], + "endIndex": 654, + "startIndex": 641, + }, + { + "$event": "closetag", + "data": [ + "description", + true, + ], + "endIndex": 654, + "startIndex": 641, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 657, + "startIndex": 655, + }, + { + "$event": "opentagname", + "data": [ + "dc:language", + ], + "endIndex": 670, + "startIndex": 658, + }, + { + "$event": "opentag", + "data": [ + "dc:language", + {}, + false, + ], + "endIndex": 670, + "startIndex": 658, + }, + { + "$event": "text", + "data": [ + "en-us", + ], + "endIndex": 675, + "startIndex": 671, + }, + { + "$event": "closetag", + "data": [ + "dc:language", + false, + ], + "endIndex": 689, + "startIndex": 676, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 692, + "startIndex": 690, + }, + { + "$event": "opentagname", + "data": [ + "dc:rights", + ], + "endIndex": 703, + "startIndex": 693, + }, + { + "$event": "opentag", + "data": [ + "dc:rights", + {}, + false, + ], + "endIndex": 703, + "startIndex": 693, + }, + { + "$event": "text", + "data": [ + "Copyright 2015 the authors", + ], + "endIndex": 729, + "startIndex": 704, + }, + { + "$event": "closetag", + "data": [ + "dc:rights", + false, + ], + "endIndex": 741, + "startIndex": 730, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 744, + "startIndex": 742, + }, + { + "$event": "opentagname", + "data": [ + "dc:publisher", + ], + "endIndex": 758, + "startIndex": 745, + }, + { + "$event": "opentag", + "data": [ + "dc:publisher", + {}, + false, + ], + "endIndex": 758, + "startIndex": 745, + }, + { + "$event": "text", + "data": [ + "webmaster@thisisafakedoma.in", + ], + "endIndex": 786, + "startIndex": 759, + }, + { + "$event": "closetag", + "data": [ + "dc:publisher", + false, + ], + "endIndex": 801, + "startIndex": 787, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 804, + "startIndex": 802, + }, + { + "$event": "opentagname", + "data": [ + "dc:creator", + ], + "endIndex": 816, + "startIndex": 805, + }, + { + "$event": "opentag", + "data": [ + "dc:creator", + {}, + false, + ], + "endIndex": 816, + "startIndex": 805, + }, + { + "$event": "text", + "data": [ + "webmaster@thisisafakedoma.in", + ], + "endIndex": 844, + "startIndex": 817, + }, + { + "$event": "closetag", + "data": [ + "dc:creator", + false, + ], + "endIndex": 857, + "startIndex": 845, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 860, + "startIndex": 858, + }, + { + "$event": "opentagname", + "data": [ + "dc:source", + ], + "endIndex": 871, + "startIndex": 861, + }, + { + "$event": "opentag", + "data": [ + "dc:source", + {}, + false, + ], + "endIndex": 871, + "startIndex": 861, + }, + { + "$event": "text", + "data": [ + "https://github.com/fb55/htmlparser2/", + ], + "endIndex": 907, + "startIndex": 872, + }, + { + "$event": "closetag", + "data": [ + "dc:source", + false, + ], + "endIndex": 919, + "startIndex": 908, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 922, + "startIndex": 920, + }, + { + "$event": "opentagname", + "data": [ + "dc:title", + ], + "endIndex": 932, + "startIndex": 923, + }, + { + "$event": "opentag", + "data": [ + "dc:title", + {}, + false, + ], + "endIndex": 932, + "startIndex": 923, + }, + { + "$event": "text", + "data": [ + "A title to parse and remember", + ], + "endIndex": 961, + "startIndex": 933, + }, + { + "$event": "closetag", + "data": [ + "dc:title", + false, + ], + "endIndex": 972, + "startIndex": 962, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 975, + "startIndex": 973, + }, + { + "$event": "opentagname", + "data": [ + "dc:type", + ], + "endIndex": 984, + "startIndex": 976, + }, + { + "$event": "opentag", + "data": [ + "dc:type", + {}, + false, + ], + "endIndex": 984, + "startIndex": 976, + }, + { + "$event": "text", + "data": [ + "Collection", + ], + "endIndex": 994, + "startIndex": 985, + }, + { + "$event": "closetag", + "data": [ + "dc:type", + false, + ], + "endIndex": 1004, + "startIndex": 995, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1007, + "startIndex": 1005, + }, + { + "$event": "opentagname", + "data": [ + "syn:updateBase", + ], + "endIndex": 1023, + "startIndex": 1008, + }, + { + "$event": "opentag", + "data": [ + "syn:updateBase", + {}, + false, + ], + "endIndex": 1023, + "startIndex": 1008, + }, + { + "$event": "text", + "data": [ + "2011-11-04T09:39:10-07:00", + ], + "endIndex": 1048, + "startIndex": 1024, + }, + { + "$event": "closetag", + "data": [ + "syn:updateBase", + false, + ], + "endIndex": 1065, + "startIndex": 1049, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1068, + "startIndex": 1066, + }, + { + "$event": "opentagname", + "data": [ + "syn:updateFrequency", + ], + "endIndex": 1089, + "startIndex": 1069, + }, + { + "$event": "opentag", + "data": [ + "syn:updateFrequency", + {}, + false, + ], + "endIndex": 1089, + "startIndex": 1069, + }, + { + "$event": "text", + "data": [ + "4", + ], + "endIndex": 1090, + "startIndex": 1090, + }, + { + "$event": "closetag", + "data": [ + "syn:updateFrequency", + false, + ], + "endIndex": 1112, + "startIndex": 1091, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1115, + "startIndex": 1113, + }, + { + "$event": "opentagname", + "data": [ + "syn:updatePeriod", + ], + "endIndex": 1133, + "startIndex": 1116, + }, + { + "$event": "opentag", + "data": [ + "syn:updatePeriod", + {}, + false, + ], + "endIndex": 1133, + "startIndex": 1116, + }, + { + "$event": "text", + "data": [ + "hourly", + ], + "endIndex": 1139, + "startIndex": 1134, + }, + { + "$event": "closetag", + "data": [ + "syn:updatePeriod", + false, + ], + "endIndex": 1158, + "startIndex": 1140, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1161, + "startIndex": 1159, + }, + { + "$event": "opentagname", + "data": [ + "items", + ], + "endIndex": 1168, + "startIndex": 1162, + }, + { + "$event": "opentag", + "data": [ + "items", + {}, + false, + ], + "endIndex": 1168, + "startIndex": 1162, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1172, + "startIndex": 1169, + }, + { + "$event": "opentagname", + "data": [ + "rdf:Seq", + ], + "endIndex": 1181, + "startIndex": 1173, + }, + { + "$event": "opentag", + "data": [ + "rdf:Seq", + {}, + false, + ], + "endIndex": 1181, + "startIndex": 1173, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1186, + "startIndex": 1182, + }, + { + "$event": "opentagname", + "data": [ + "rdf:li", + ], + "endIndex": 1194, + "startIndex": 1187, + }, + { + "$event": "attribute", + "data": [ + "rdf:resource", + "http://somefakesite/path/to/something.html", + """, + ], + "endIndex": 1252, + "startIndex": 1195, + }, + { + "$event": "opentag", + "data": [ + "rdf:li", + { + "rdf:resource": "http://somefakesite/path/to/something.html", + }, + false, + ], + "endIndex": 1253, + "startIndex": 1187, + }, + { + "$event": "closetag", + "data": [ + "rdf:li", + true, + ], + "endIndex": 1253, + "startIndex": 1187, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1257, + "startIndex": 1254, + }, + { + "$event": "closetag", + "data": [ + "rdf:Seq", + false, + ], + "endIndex": 1267, + "startIndex": 1258, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1270, + "startIndex": 1268, + }, + { + "$event": "closetag", + "data": [ + "items", + false, + ], + "endIndex": 1278, + "startIndex": 1271, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1280, + "startIndex": 1279, + }, + { + "$event": "closetag", + "data": [ + "channel", + false, + ], + "endIndex": 1290, + "startIndex": 1281, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1292, + "startIndex": 1291, + }, + { + "$event": "opentagname", + "data": [ + "item", + ], + "endIndex": 1298, + "startIndex": 1293, + }, + { + "$event": "attribute", + "data": [ + "rdf:about", + "http://somefakesite/path/to/something.html", + """, + ], + "endIndex": 1353, + "startIndex": 1299, + }, + { + "$event": "opentag", + "data": [ + "item", + { + "rdf:about": "http://somefakesite/path/to/something.html", + }, + false, + ], + "endIndex": 1353, + "startIndex": 1293, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1356, + "startIndex": 1354, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 1363, + "startIndex": 1357, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 1363, + "startIndex": 1357, + }, + { + "$event": "cdatastart", + "data": [], + "endIndex": 1394, + "startIndex": 1364, + }, + { + "$event": "text", + "data": [ + " Fast HTML Parsing ", + ], + "endIndex": 1394, + "startIndex": 1364, + }, + { + "$event": "cdataend", + "data": [], + "endIndex": 1394, + "startIndex": 1364, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 1402, + "startIndex": 1395, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1405, + "startIndex": 1403, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 1411, + "startIndex": 1406, + }, + { + "$event": "opentag", + "data": [ + "link", + {}, + false, + ], + "endIndex": 1411, + "startIndex": 1406, + }, + { + "$event": "text", + "data": [ + " +http://somefakesite/path/to/something.html +", + ], + "endIndex": 1455, + "startIndex": 1412, + }, + { + "$event": "closetag", + "data": [ + "link", + false, + ], + "endIndex": 1462, + "startIndex": 1456, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1465, + "startIndex": 1463, + }, + { + "$event": "opentagname", + "data": [ + "description", + ], + "endIndex": 1478, + "startIndex": 1466, + }, + { + "$event": "opentag", + "data": [ + "description", + {}, + false, + ], + "endIndex": 1478, + "startIndex": 1466, + }, + { + "$event": "cdatastart", + "data": [], + "endIndex": 1560, + "startIndex": 1479, + }, + { + "$event": "text", + "data": [ + " +Great test content
A link: Github +", + ], + "endIndex": 1560, + "startIndex": 1479, + }, + { + "$event": "cdataend", + "data": [], + "endIndex": 1560, + "startIndex": 1479, + }, + { + "$event": "closetag", + "data": [ + "description", + false, + ], + "endIndex": 1574, + "startIndex": 1561, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1577, + "startIndex": 1575, + }, + { + "$event": "opentagname", + "data": [ + "dc:date", + ], + "endIndex": 1586, + "startIndex": 1578, + }, + { + "$event": "opentag", + "data": [ + "dc:date", + {}, + false, + ], + "endIndex": 1586, + "startIndex": 1578, + }, + { + "$event": "text", + "data": [ + "2011-11-04T09:35:17-07:00", + ], + "endIndex": 1611, + "startIndex": 1587, + }, + { + "$event": "closetag", + "data": [ + "dc:date", + false, + ], + "endIndex": 1621, + "startIndex": 1612, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1624, + "startIndex": 1622, + }, + { + "$event": "opentagname", + "data": [ + "dc:language", + ], + "endIndex": 1637, + "startIndex": 1625, + }, + { + "$event": "opentag", + "data": [ + "dc:language", + {}, + false, + ], + "endIndex": 1637, + "startIndex": 1625, + }, + { + "$event": "text", + "data": [ + "en-us", + ], + "endIndex": 1642, + "startIndex": 1638, + }, + { + "$event": "closetag", + "data": [ + "dc:language", + false, + ], + "endIndex": 1656, + "startIndex": 1643, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1659, + "startIndex": 1657, + }, + { + "$event": "opentagname", + "data": [ + "dc:rights", + ], + "endIndex": 1670, + "startIndex": 1660, + }, + { + "$event": "opentag", + "data": [ + "dc:rights", + {}, + false, + ], + "endIndex": 1670, + "startIndex": 1660, + }, + { + "$event": "text", + "data": [ + "Copyright 2015 the authors", + ], + "endIndex": 1696, + "startIndex": 1671, + }, + { + "$event": "closetag", + "data": [ + "dc:rights", + false, + ], + "endIndex": 1708, + "startIndex": 1697, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1711, + "startIndex": 1709, + }, + { + "$event": "opentagname", + "data": [ + "dc:source", + ], + "endIndex": 1722, + "startIndex": 1712, + }, + { + "$event": "opentag", + "data": [ + "dc:source", + {}, + false, + ], + "endIndex": 1722, + "startIndex": 1712, + }, + { + "$event": "text", + "data": [ + " +http://somefakesite/path/to/something.html +", + ], + "endIndex": 1766, + "startIndex": 1723, + }, + { + "$event": "closetag", + "data": [ + "dc:source", + false, + ], + "endIndex": 1778, + "startIndex": 1767, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1781, + "startIndex": 1779, + }, + { + "$event": "opentagname", + "data": [ + "dc:title", + ], + "endIndex": 1791, + "startIndex": 1782, + }, + { + "$event": "opentag", + "data": [ + "dc:title", + {}, + false, + ], + "endIndex": 1791, + "startIndex": 1782, + }, + { + "$event": "cdatastart", + "data": [], + "endIndex": 1822, + "startIndex": 1792, + }, + { + "$event": "text", + "data": [ + " Fast HTML Parsing ", + ], + "endIndex": 1822, + "startIndex": 1792, + }, + { + "$event": "cdataend", + "data": [], + "endIndex": 1822, + "startIndex": 1792, + }, + { + "$event": "closetag", + "data": [ + "dc:title", + false, + ], + "endIndex": 1833, + "startIndex": 1823, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1836, + "startIndex": 1834, + }, + { + "$event": "opentagname", + "data": [ + "dc:type", + ], + "endIndex": 1845, + "startIndex": 1837, + }, + { + "$event": "opentag", + "data": [ + "dc:type", + {}, + false, + ], + "endIndex": 1845, + "startIndex": 1837, + }, + { + "$event": "text", + "data": [ + "text", + ], + "endIndex": 1849, + "startIndex": 1846, + }, + { + "$event": "closetag", + "data": [ + "dc:type", + false, + ], + "endIndex": 1859, + "startIndex": 1850, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1862, + "startIndex": 1860, + }, + { + "$event": "opentagname", + "data": [ + "dcterms:issued", + ], + "endIndex": 1878, + "startIndex": 1863, + }, + { + "$event": "opentag", + "data": [ + "dcterms:issued", + {}, + false, + ], + "endIndex": 1878, + "startIndex": 1863, + }, + { + "$event": "text", + "data": [ + "2011-11-04T09:35:17-07:00", + ], + "endIndex": 1903, + "startIndex": 1879, + }, + { + "$event": "closetag", + "data": [ + "dcterms:issued", + false, + ], + "endIndex": 1920, + "startIndex": 1904, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1922, + "startIndex": 1921, + }, + { + "$event": "closetag", + "data": [ + "item", + false, + ], + "endIndex": 1929, + "startIndex": 1923, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1931, + "startIndex": 1930, + }, + { + "$event": "opentagname", + "data": [ + "item", + ], + "endIndex": 1937, + "startIndex": 1932, + }, + { + "$event": "attribute", + "data": [ + "rdf:about", + "http://somefakesite/path/to/something-else.html", + """, + ], + "endIndex": 1997, + "startIndex": 1938, + }, + { + "$event": "opentag", + "data": [ + "item", + { + "rdf:about": "http://somefakesite/path/to/something-else.html", + }, + false, + ], + "endIndex": 1997, + "startIndex": 1932, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2000, + "startIndex": 1998, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 2007, + "startIndex": 2001, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 2007, + "startIndex": 2001, + }, + { + "$event": "cdatastart", + "data": [], + "endIndex": 2056, + "startIndex": 2008, + }, + { + "$event": "text", + "data": [ + " +This space intentionally left blank +", + ], + "endIndex": 2056, + "startIndex": 2008, + }, + { + "$event": "cdataend", + "data": [], + "endIndex": 2056, + "startIndex": 2008, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 2064, + "startIndex": 2057, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2067, + "startIndex": 2065, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 2073, + "startIndex": 2068, + }, + { + "$event": "opentag", + "data": [ + "link", + {}, + false, + ], + "endIndex": 2073, + "startIndex": 2068, + }, + { + "$event": "text", + "data": [ + " +http://somefakesite/path/to/something-else.html +", + ], + "endIndex": 2122, + "startIndex": 2074, + }, + { + "$event": "closetag", + "data": [ + "link", + false, + ], + "endIndex": 2129, + "startIndex": 2123, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2132, + "startIndex": 2130, + }, + { + "$event": "opentagname", + "data": [ + "description", + ], + "endIndex": 2145, + "startIndex": 2133, + }, + { + "$event": "opentag", + "data": [ + "description", + {}, + false, + ], + "endIndex": 2145, + "startIndex": 2133, + }, + { + "$event": "cdatastart", + "data": [], + "endIndex": 2187, + "startIndex": 2146, + }, + { + "$event": "text", + "data": [ + " +The early bird gets the worm +", + ], + "endIndex": 2187, + "startIndex": 2146, + }, + { + "$event": "cdataend", + "data": [], + "endIndex": 2187, + "startIndex": 2146, + }, + { + "$event": "closetag", + "data": [ + "description", + false, + ], + "endIndex": 2201, + "startIndex": 2188, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2204, + "startIndex": 2202, + }, + { + "$event": "opentagname", + "data": [ + "dc:date", + ], + "endIndex": 2213, + "startIndex": 2205, + }, + { + "$event": "opentag", + "data": [ + "dc:date", + {}, + false, + ], + "endIndex": 2213, + "startIndex": 2205, + }, + { + "$event": "text", + "data": [ + "2011-11-04T09:34:54-07:00", + ], + "endIndex": 2238, + "startIndex": 2214, + }, + { + "$event": "closetag", + "data": [ + "dc:date", + false, + ], + "endIndex": 2248, + "startIndex": 2239, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2251, + "startIndex": 2249, + }, + { + "$event": "opentagname", + "data": [ + "dc:language", + ], + "endIndex": 2264, + "startIndex": 2252, + }, + { + "$event": "opentag", + "data": [ + "dc:language", + {}, + false, + ], + "endIndex": 2264, + "startIndex": 2252, + }, + { + "$event": "text", + "data": [ + "en-us", + ], + "endIndex": 2269, + "startIndex": 2265, + }, + { + "$event": "closetag", + "data": [ + "dc:language", + false, + ], + "endIndex": 2283, + "startIndex": 2270, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2286, + "startIndex": 2284, + }, + { + "$event": "opentagname", + "data": [ + "dc:rights", + ], + "endIndex": 2297, + "startIndex": 2287, + }, + { + "$event": "opentag", + "data": [ + "dc:rights", + {}, + false, + ], + "endIndex": 2297, + "startIndex": 2287, + }, + { + "$event": "text", + "data": [ + "Copyright 2015 the authors", + ], + "endIndex": 2323, + "startIndex": 2298, + }, + { + "$event": "closetag", + "data": [ + "dc:rights", + false, + ], + "endIndex": 2335, + "startIndex": 2324, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2338, + "startIndex": 2336, + }, + { + "$event": "opentagname", + "data": [ + "dc:source", + ], + "endIndex": 2349, + "startIndex": 2339, + }, + { + "$event": "opentag", + "data": [ + "dc:source", + {}, + false, + ], + "endIndex": 2349, + "startIndex": 2339, + }, + { + "$event": "text", + "data": [ + " +http://somefakesite/path/to/something-else.html +", + ], + "endIndex": 2398, + "startIndex": 2350, + }, + { + "$event": "closetag", + "data": [ + "dc:source", + false, + ], + "endIndex": 2410, + "startIndex": 2399, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2413, + "startIndex": 2411, + }, + { + "$event": "opentagname", + "data": [ + "dc:title", + ], + "endIndex": 2423, + "startIndex": 2414, + }, + { + "$event": "opentag", + "data": [ + "dc:title", + {}, + false, + ], + "endIndex": 2423, + "startIndex": 2414, + }, + { + "$event": "cdatastart", + "data": [], + "endIndex": 2472, + "startIndex": 2424, + }, + { + "$event": "text", + "data": [ + " +This space intentionally left blank +", + ], + "endIndex": 2472, + "startIndex": 2424, + }, + { + "$event": "cdataend", + "data": [], + "endIndex": 2472, + "startIndex": 2424, + }, + { + "$event": "closetag", + "data": [ + "dc:title", + false, + ], + "endIndex": 2483, + "startIndex": 2473, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2486, + "startIndex": 2484, + }, + { + "$event": "opentagname", + "data": [ + "dc:type", + ], + "endIndex": 2495, + "startIndex": 2487, + }, + { + "$event": "opentag", + "data": [ + "dc:type", + {}, + false, + ], + "endIndex": 2495, + "startIndex": 2487, + }, + { + "$event": "text", + "data": [ + "text", + ], + "endIndex": 2499, + "startIndex": 2496, + }, + { + "$event": "closetag", + "data": [ + "dc:type", + false, + ], + "endIndex": 2509, + "startIndex": 2500, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2512, + "startIndex": 2510, + }, + { + "$event": "opentagname", + "data": [ + "dcterms:issued", + ], + "endIndex": 2528, + "startIndex": 2513, + }, + { + "$event": "opentag", + "data": [ + "dcterms:issued", + {}, + false, + ], + "endIndex": 2528, + "startIndex": 2513, + }, + { + "$event": "text", + "data": [ + "2011-11-04T09:34:54-07:00", + ], + "endIndex": 2553, + "startIndex": 2529, + }, + { + "$event": "closetag", + "data": [ + "dcterms:issued", + false, + ], + "endIndex": 2570, + "startIndex": 2554, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2572, + "startIndex": 2571, + }, + { + "$event": "closetag", + "data": [ + "item", + false, + ], + "endIndex": 2579, + "startIndex": 2573, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 2580, + "startIndex": 2580, + }, + { + "$event": "closetag", + "data": [ + "rdf:RDF", + false, + ], + "endIndex": 2590, + "startIndex": 2581, + }, +] +`; + +exports[`WebWritableStream > RSS feed 1`] = ` +[ + { + "$event": "processinginstruction", + "data": [ + "?xml", + "?xml version="1.0"", + ], + "endIndex": 19, + "startIndex": 0, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 21, + "startIndex": 20, + }, + { + "$event": "comment", + "data": [ + " http://cyber.law.harvard.edu/rss/examples/rss2sample.xml ", + ], + "endIndex": 86, + "startIndex": 22, + }, + { + "$event": "commentend", + "data": [], + "endIndex": 86, + "startIndex": 22, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 87, + "startIndex": 87, + }, + { + "$event": "opentagname", + "data": [ + "rss", + ], + "endIndex": 92, + "startIndex": 88, + }, + { + "$event": "attribute", + "data": [ + "version", + "2.0", + """, + ], + "endIndex": 106, + "startIndex": 93, + }, + { + "$event": "opentag", + "data": [ + "rss", + { + "version": "2.0", + }, + false, + ], + "endIndex": 106, + "startIndex": 88, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 110, + "startIndex": 107, + }, + { + "$event": "opentagname", + "data": [ + "channel", + ], + "endIndex": 119, + "startIndex": 111, + }, + { + "$event": "opentag", + "data": [ + "channel", + {}, + false, + ], + "endIndex": 119, + "startIndex": 111, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 126, + "startIndex": 120, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 133, + "startIndex": 127, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 133, + "startIndex": 127, + }, + { + "$event": "text", + "data": [ + "Liftoff News", + ], + "endIndex": 145, + "startIndex": 134, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 153, + "startIndex": 146, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 160, + "startIndex": 154, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 166, + "startIndex": 161, + }, + { + "$event": "opentag", + "data": [ + "link", + {}, + false, + ], + "endIndex": 166, + "startIndex": 161, + }, + { + "$event": "text", + "data": [ + "http://liftoff.msfc.nasa.gov/", + ], + "endIndex": 195, + "startIndex": 167, + }, + { + "$event": "closetag", + "data": [ + "link", + false, + ], + "endIndex": 202, + "startIndex": 196, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 209, + "startIndex": 203, + }, + { + "$event": "opentagname", + "data": [ + "description", + ], + "endIndex": 222, + "startIndex": 210, + }, + { + "$event": "opentag", + "data": [ + "description", + {}, + false, + ], + "endIndex": 222, + "startIndex": 210, + }, + { + "$event": "text", + "data": [ + "Liftoff to Space Exploration.", + ], + "endIndex": 251, + "startIndex": 223, + }, + { + "$event": "closetag", + "data": [ + "description", + false, + ], + "endIndex": 265, + "startIndex": 252, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 272, + "startIndex": 266, + }, + { + "$event": "opentagname", + "data": [ + "language", + ], + "endIndex": 282, + "startIndex": 273, + }, + { + "$event": "opentag", + "data": [ + "language", + {}, + false, + ], + "endIndex": 282, + "startIndex": 273, + }, + { + "$event": "text", + "data": [ + "en-us", + ], + "endIndex": 287, + "startIndex": 283, + }, + { + "$event": "closetag", + "data": [ + "language", + false, + ], + "endIndex": 298, + "startIndex": 288, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 305, + "startIndex": 299, + }, + { + "$event": "opentagname", + "data": [ + "pubDate", + ], + "endIndex": 314, + "startIndex": 306, + }, + { + "$event": "opentag", + "data": [ + "pubDate", + {}, + false, + ], + "endIndex": 314, + "startIndex": 306, + }, + { + "$event": "text", + "data": [ + "Tue, 10 Jun 2003 04:00:00 GMT", + ], + "endIndex": 343, + "startIndex": 315, + }, + { + "$event": "closetag", + "data": [ + "pubDate", + false, + ], + "endIndex": 353, + "startIndex": 344, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 361, + "startIndex": 354, + }, + { + "$event": "opentagname", + "data": [ + "lastBuildDate", + ], + "endIndex": 376, + "startIndex": 362, + }, + { + "$event": "opentag", + "data": [ + "lastBuildDate", + {}, + false, + ], + "endIndex": 376, + "startIndex": 362, + }, + { + "$event": "text", + "data": [ + "Tue, 10 Jun 2003 09:41:01 GMT", + ], + "endIndex": 405, + "startIndex": 377, + }, + { + "$event": "closetag", + "data": [ + "lastBuildDate", + false, + ], + "endIndex": 421, + "startIndex": 406, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 428, + "startIndex": 422, + }, + { + "$event": "opentagname", + "data": [ + "docs", + ], + "endIndex": 434, + "startIndex": 429, + }, + { + "$event": "opentag", + "data": [ + "docs", + {}, + false, + ], + "endIndex": 434, + "startIndex": 429, + }, + { + "$event": "text", + "data": [ + "http://blogs.law.harvard.edu/tech/rss", + ], + "endIndex": 471, + "startIndex": 435, + }, + { + "$event": "closetag", + "data": [ + "docs", + false, + ], + "endIndex": 478, + "startIndex": 472, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 485, + "startIndex": 479, + }, + { + "$event": "opentagname", + "data": [ + "generator", + ], + "endIndex": 496, + "startIndex": 486, + }, + { + "$event": "opentag", + "data": [ + "generator", + {}, + false, + ], + "endIndex": 496, + "startIndex": 486, + }, + { + "$event": "text", + "data": [ + "Weblog Editor 2.0", + ], + "endIndex": 513, + "startIndex": 497, + }, + { + "$event": "closetag", + "data": [ + "generator", + false, + ], + "endIndex": 525, + "startIndex": 514, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 532, + "startIndex": 526, + }, + { + "$event": "opentagname", + "data": [ + "managingEditor", + ], + "endIndex": 548, + "startIndex": 533, + }, + { + "$event": "opentag", + "data": [ + "managingEditor", + {}, + false, + ], + "endIndex": 548, + "startIndex": 533, + }, + { + "$event": "text", + "data": [ + "editor@example.com", + ], + "endIndex": 566, + "startIndex": 549, + }, + { + "$event": "closetag", + "data": [ + "managingEditor", + false, + ], + "endIndex": 583, + "startIndex": 567, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 590, + "startIndex": 584, + }, + { + "$event": "opentagname", + "data": [ + "webMaster", + ], + "endIndex": 601, + "startIndex": 591, + }, + { + "$event": "opentag", + "data": [ + "webMaster", + {}, + false, + ], + "endIndex": 601, + "startIndex": 591, + }, + { + "$event": "text", + "data": [ + "webmaster@example.com", + ], + "endIndex": 622, + "startIndex": 602, + }, + { + "$event": "closetag", + "data": [ + "webMaster", + false, + ], + "endIndex": 634, + "startIndex": 623, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 641, + "startIndex": 635, + }, + { + "$event": "opentagname", + "data": [ + "item", + ], + "endIndex": 647, + "startIndex": 642, + }, + { + "$event": "opentag", + "data": [ + "item", + {}, + false, + ], + "endIndex": 647, + "startIndex": 642, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 658, + "startIndex": 648, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 665, + "startIndex": 659, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 665, + "startIndex": 659, + }, + { + "$event": "text", + "data": [ + "Star City", + ], + "endIndex": 674, + "startIndex": 666, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 682, + "startIndex": 675, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 692, + "startIndex": 683, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 698, + "startIndex": 693, + }, + { + "$event": "opentag", + "data": [ + "link", + {}, + false, + ], + "endIndex": 698, + "startIndex": 693, + }, + { + "$event": "text", + "data": [ + "http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp", + ], + "endIndex": 754, + "startIndex": 699, + }, + { + "$event": "closetag", + "data": [ + "link", + false, + ], + "endIndex": 761, + "startIndex": 755, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 771, + "startIndex": 762, + }, + { + "$event": "opentagname", + "data": [ + "description", + ], + "endIndex": 784, + "startIndex": 772, + }, + { + "$event": "opentag", + "data": [ + "description", + {}, + false, + ], + "endIndex": 784, + "startIndex": 772, + }, + { + "$event": "text", + "data": [ + "How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's Star City.", + ], + "endIndex": 1020, + "startIndex": 785, + }, + { + "$event": "closetag", + "data": [ + "description", + false, + ], + "endIndex": 1034, + "startIndex": 1021, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1044, + "startIndex": 1035, + }, + { + "$event": "opentagname", + "data": [ + "pubDate", + ], + "endIndex": 1053, + "startIndex": 1045, + }, + { + "$event": "opentag", + "data": [ + "pubDate", + {}, + false, + ], + "endIndex": 1053, + "startIndex": 1045, + }, + { + "$event": "text", + "data": [ + "Tue, 03 Jun 2003 09:39:21 GMT", + ], + "endIndex": 1082, + "startIndex": 1054, + }, + { + "$event": "closetag", + "data": [ + "pubDate", + false, + ], + "endIndex": 1092, + "startIndex": 1083, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1102, + "startIndex": 1093, + }, + { + "$event": "opentagname", + "data": [ + "guid", + ], + "endIndex": 1108, + "startIndex": 1103, + }, + { + "$event": "opentag", + "data": [ + "guid", + {}, + false, + ], + "endIndex": 1108, + "startIndex": 1103, + }, + { + "$event": "text", + "data": [ + "http://liftoff.msfc.nasa.gov/2003/06/03.html#item573", + ], + "endIndex": 1160, + "startIndex": 1109, + }, + { + "$event": "closetag", + "data": [ + "guid", + false, + ], + "endIndex": 1167, + "startIndex": 1161, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 1175, + "startIndex": 1168, + }, + { + "$event": "closetag", + "data": [ + "item", + false, + ], + "endIndex": 1182, + "startIndex": 1176, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1189, + "startIndex": 1183, + }, + { + "$event": "opentagname", + "data": [ + "item", + ], + "endIndex": 1195, + "startIndex": 1190, + }, + { + "$event": "opentag", + "data": [ + "item", + {}, + false, + ], + "endIndex": 1195, + "startIndex": 1190, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1205, + "startIndex": 1196, + }, + { + "$event": "opentagname", + "data": [ + "description", + ], + "endIndex": 1218, + "startIndex": 1206, + }, + { + "$event": "opentag", + "data": [ + "description", + {}, + false, + ], + "endIndex": 1218, + "startIndex": 1206, + }, + { + "$event": "text", + "data": [ + "Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a partial eclipse of the Sun on Saturday, May 31st.", + ], + "endIndex": 1435, + "startIndex": 1219, + }, + { + "$event": "closetag", + "data": [ + "description", + false, + ], + "endIndex": 1449, + "startIndex": 1436, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1459, + "startIndex": 1450, + }, + { + "$event": "opentagname", + "data": [ + "pubDate", + ], + "endIndex": 1468, + "startIndex": 1460, + }, + { + "$event": "opentag", + "data": [ + "pubDate", + {}, + false, + ], + "endIndex": 1468, + "startIndex": 1460, + }, + { + "$event": "text", + "data": [ + "Fri, 30 May 2003 11:06:42 GMT", + ], + "endIndex": 1497, + "startIndex": 1469, + }, + { + "$event": "closetag", + "data": [ + "pubDate", + false, + ], + "endIndex": 1507, + "startIndex": 1498, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1517, + "startIndex": 1508, + }, + { + "$event": "opentagname", + "data": [ + "guid", + ], + "endIndex": 1523, + "startIndex": 1518, + }, + { + "$event": "opentag", + "data": [ + "guid", + {}, + false, + ], + "endIndex": 1523, + "startIndex": 1518, + }, + { + "$event": "text", + "data": [ + "http://liftoff.msfc.nasa.gov/2003/05/30.html#item572", + ], + "endIndex": 1575, + "startIndex": 1524, + }, + { + "$event": "closetag", + "data": [ + "guid", + false, + ], + "endIndex": 1582, + "startIndex": 1576, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 1590, + "startIndex": 1583, + }, + { + "$event": "closetag", + "data": [ + "item", + false, + ], + "endIndex": 1597, + "startIndex": 1591, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1604, + "startIndex": 1598, + }, + { + "$event": "opentagname", + "data": [ + "item", + ], + "endIndex": 1610, + "startIndex": 1605, + }, + { + "$event": "opentag", + "data": [ + "item", + {}, + false, + ], + "endIndex": 1610, + "startIndex": 1605, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1620, + "startIndex": 1611, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 1627, + "startIndex": 1621, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 1627, + "startIndex": 1621, + }, + { + "$event": "text", + "data": [ + "The Engine That Does More", + ], + "endIndex": 1652, + "startIndex": 1628, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 1660, + "startIndex": 1653, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1670, + "startIndex": 1661, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 1676, + "startIndex": 1671, + }, + { + "$event": "opentag", + "data": [ + "link", + {}, + false, + ], + "endIndex": 1676, + "startIndex": 1671, + }, + { + "$event": "text", + "data": [ + "http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp", + ], + "endIndex": 1730, + "startIndex": 1677, + }, + { + "$event": "closetag", + "data": [ + "link", + false, + ], + "endIndex": 1737, + "startIndex": 1731, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1747, + "startIndex": 1738, + }, + { + "$event": "opentagname", + "data": [ + "description", + ], + "endIndex": 1760, + "startIndex": 1748, + }, + { + "$event": "opentag", + "data": [ + "description", + {}, + false, + ], + "endIndex": 1760, + "startIndex": 1748, + }, + { + "$event": "text", + "data": [ + "Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly. The proposed VASIMR engine would do that.", + ], + "endIndex": 1923, + "startIndex": 1761, + }, + { + "$event": "closetag", + "data": [ + "description", + false, + ], + "endIndex": 1937, + "startIndex": 1924, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 1947, + "startIndex": 1938, + }, + { + "$event": "opentagname", + "data": [ + "pubDate", + ], + "endIndex": 1956, + "startIndex": 1948, + }, + { + "$event": "opentag", + "data": [ + "pubDate", + {}, + false, + ], + "endIndex": 1956, + "startIndex": 1948, + }, + { + "$event": "text", + "data": [ + "Tue, 27 May 2003 08:37:32 GMT", + ], + "endIndex": 1985, + "startIndex": 1957, + }, + { + "$event": "closetag", + "data": [ + "pubDate", + false, + ], + "endIndex": 1995, + "startIndex": 1986, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2005, + "startIndex": 1996, + }, + { + "$event": "opentagname", + "data": [ + "guid", + ], + "endIndex": 2011, + "startIndex": 2006, + }, + { + "$event": "opentag", + "data": [ + "guid", + {}, + false, + ], + "endIndex": 2011, + "startIndex": 2006, + }, + { + "$event": "text", + "data": [ + "http://liftoff.msfc.nasa.gov/2003/05/27.html#item571", + ], + "endIndex": 2063, + "startIndex": 2012, + }, + { + "$event": "closetag", + "data": [ + "guid", + false, + ], + "endIndex": 2070, + "startIndex": 2064, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 2078, + "startIndex": 2071, + }, + { + "$event": "closetag", + "data": [ + "item", + false, + ], + "endIndex": 2085, + "startIndex": 2079, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2092, + "startIndex": 2086, + }, + { + "$event": "opentagname", + "data": [ + "item", + ], + "endIndex": 2098, + "startIndex": 2093, + }, + { + "$event": "opentag", + "data": [ + "item", + {}, + false, + ], + "endIndex": 2098, + "startIndex": 2093, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2108, + "startIndex": 2099, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 2115, + "startIndex": 2109, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 2115, + "startIndex": 2109, + }, + { + "$event": "text", + "data": [ + "Astronauts' Dirty Laundry", + ], + "endIndex": 2140, + "startIndex": 2116, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 2148, + "startIndex": 2141, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2158, + "startIndex": 2149, + }, + { + "$event": "opentagname", + "data": [ + "link", + ], + "endIndex": 2164, + "startIndex": 2159, + }, + { + "$event": "opentag", + "data": [ + "link", + {}, + false, + ], + "endIndex": 2164, + "startIndex": 2159, + }, + { + "$event": "text", + "data": [ + "http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp", + ], + "endIndex": 2219, + "startIndex": 2165, + }, + { + "$event": "closetag", + "data": [ + "link", + false, + ], + "endIndex": 2226, + "startIndex": 2220, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2236, + "startIndex": 2227, + }, + { + "$event": "opentagname", + "data": [ + "description", + ], + "endIndex": 2249, + "startIndex": 2237, + }, + { + "$event": "opentag", + "data": [ + "description", + {}, + false, + ], + "endIndex": 2249, + "startIndex": 2237, + }, + { + "$event": "text", + "data": [ + "Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them. Instead, astronauts have other options.", + ], + "endIndex": 2416, + "startIndex": 2250, + }, + { + "$event": "closetag", + "data": [ + "description", + false, + ], + "endIndex": 2430, + "startIndex": 2417, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2440, + "startIndex": 2431, + }, + { + "$event": "opentagname", + "data": [ + "pubDate", + ], + "endIndex": 2449, + "startIndex": 2441, + }, + { + "$event": "opentag", + "data": [ + "pubDate", + {}, + false, + ], + "endIndex": 2449, + "startIndex": 2441, + }, + { + "$event": "text", + "data": [ + "Tue, 20 May 2003 08:56:02 GMT", + ], + "endIndex": 2478, + "startIndex": 2450, + }, + { + "$event": "closetag", + "data": [ + "pubDate", + false, + ], + "endIndex": 2488, + "startIndex": 2479, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2498, + "startIndex": 2489, + }, + { + "$event": "opentagname", + "data": [ + "guid", + ], + "endIndex": 2504, + "startIndex": 2499, + }, + { + "$event": "opentag", + "data": [ + "guid", + {}, + false, + ], + "endIndex": 2504, + "startIndex": 2499, + }, + { + "$event": "text", + "data": [ + "http://liftoff.msfc.nasa.gov/2003/05/20.html#item570", + ], + "endIndex": 2556, + "startIndex": 2505, + }, + { + "$event": "closetag", + "data": [ + "guid", + false, + ], + "endIndex": 2563, + "startIndex": 2557, + }, + { + "$event": "text", + "data": [ + " + + ", + ], + "endIndex": 2574, + "startIndex": 2564, + }, + { + "$event": "opentagname", + "data": [ + "media:content", + ], + "endIndex": 2589, + "startIndex": 2575, + }, + { + "$event": "attribute", + "data": [ + "height", + "200", + """, + ], + "endIndex": 2602, + "startIndex": 2590, + }, + { + "$event": "attribute", + "data": [ + "medium", + "image", + """, + ], + "endIndex": 2617, + "startIndex": 2603, + }, + { + "$event": "attribute", + "data": [ + "url", + "https://picsum.photos/200", + """, + ], + "endIndex": 2649, + "startIndex": 2618, + }, + { + "$event": "attribute", + "data": [ + "width", + "200", + """, + ], + "endIndex": 2661, + "startIndex": 2650, + }, + { + "$event": "opentag", + "data": [ + "media:content", + { + "height": "200", + "medium": "image", + "url": "https://picsum.photos/200", + "width": "200", + }, + false, + ], + "endIndex": 2662, + "startIndex": 2575, + }, + { + "$event": "closetag", + "data": [ + "media:content", + true, + ], + "endIndex": 2662, + "startIndex": 2575, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2669, + "startIndex": 2663, + }, + { + "$event": "closetag", + "data": [ + "item", + false, + ], + "endIndex": 2676, + "startIndex": 2670, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 2680, + "startIndex": 2677, + }, + { + "$event": "closetag", + "data": [ + "channel", + false, + ], + "endIndex": 2690, + "startIndex": 2681, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 2691, + "startIndex": 2691, + }, + { + "$event": "closetag", + "data": [ + "rss", + false, + ], + "endIndex": 2697, + "startIndex": 2692, + }, +] +`; + +exports[`WebWritableStream > SVG 1`] = ` +[ + { + "$event": "processinginstruction", + "data": [ + "!doctype", + "!doctype html", + ], + "endIndex": 14, + "startIndex": 0, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 15, + "startIndex": 15, + }, + { + "$event": "opentagname", + "data": [ + "html", + ], + "endIndex": 21, + "startIndex": 16, + }, + { + "$event": "opentag", + "data": [ + "html", + {}, + false, + ], + "endIndex": 21, + "startIndex": 16, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 22, + "startIndex": 22, + }, + { + "$event": "opentagname", + "data": [ + "head", + ], + "endIndex": 28, + "startIndex": 23, + }, + { + "$event": "opentag", + "data": [ + "head", + {}, + false, + ], + "endIndex": 28, + "startIndex": 23, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 30, + "startIndex": 29, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 37, + "startIndex": 31, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 37, + "startIndex": 31, + }, + { + "$event": "text", + "data": [ + "SVG test", + ], + "endIndex": 45, + "startIndex": 38, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 53, + "startIndex": 46, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 54, + "startIndex": 54, + }, + { + "$event": "closetag", + "data": [ + "head", + false, + ], + "endIndex": 61, + "startIndex": 55, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 62, + "startIndex": 62, + }, + { + "$event": "opentagname", + "data": [ + "body", + ], + "endIndex": 68, + "startIndex": 63, + }, + { + "$event": "opentag", + "data": [ + "body", + {}, + false, + ], + "endIndex": 68, + "startIndex": 63, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 70, + "startIndex": 69, + }, + { + "$event": "opentagname", + "data": [ + "svg", + ], + "endIndex": 75, + "startIndex": 71, + }, + { + "$event": "attribute", + "data": [ + "version", + "1.1", + """, + ], + "endIndex": 89, + "startIndex": 76, + }, + { + "$event": "attribute", + "data": [ + "xmlns", + "http://www.w3.org/2000/svg", + """, + ], + "endIndex": 124, + "startIndex": 90, + }, + { + "$event": "attribute", + "data": [ + "xmlns:xlink", + "http://www.w3.org/1999/xlink", + """, + ], + "endIndex": 167, + "startIndex": 125, + }, + { + "$event": "opentag", + "data": [ + "svg", + { + "version": "1.1", + "xmlns": "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink", + }, + false, + ], + "endIndex": 167, + "startIndex": 71, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 170, + "startIndex": 168, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 177, + "startIndex": 171, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 177, + "startIndex": 171, + }, + { + "$event": "text", + "data": [ + "Test", + ], + "endIndex": 181, + "startIndex": 178, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 189, + "startIndex": 182, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 192, + "startIndex": 190, + }, + { + "$event": "opentagname", + "data": [ + "animate", + ], + "endIndex": 201, + "startIndex": 193, + }, + { + "$event": "opentag", + "data": [ + "animate", + {}, + false, + ], + "endIndex": 203, + "startIndex": 193, + }, + { + "$event": "closetag", + "data": [ + "animate", + true, + ], + "endIndex": 203, + "startIndex": 193, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 206, + "startIndex": 204, + }, + { + "$event": "opentagname", + "data": [ + "polygon", + ], + "endIndex": 215, + "startIndex": 207, + }, + { + "$event": "opentag", + "data": [ + "polygon", + {}, + false, + ], + "endIndex": 217, + "startIndex": 207, + }, + { + "$event": "closetag", + "data": [ + "polygon", + true, + ], + "endIndex": 217, + "startIndex": 207, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 220, + "startIndex": 218, + }, + { + "$event": "opentagname", + "data": [ + "g", + ], + "endIndex": 223, + "startIndex": 221, + }, + { + "$event": "opentag", + "data": [ + "g", + {}, + false, + ], + "endIndex": 223, + "startIndex": 221, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 227, + "startIndex": 224, + }, + { + "$event": "opentagname", + "data": [ + "path", + ], + "endIndex": 233, + "startIndex": 228, + }, + { + "$event": "opentag", + "data": [ + "path", + {}, + false, + ], + "endIndex": 233, + "startIndex": 228, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 238, + "startIndex": 234, + }, + { + "$event": "opentagname", + "data": [ + "title", + ], + "endIndex": 245, + "startIndex": 239, + }, + { + "$event": "opentag", + "data": [ + "title", + {}, + false, + ], + "endIndex": 245, + "startIndex": 239, + }, + { + "$event": "text", + "data": [ + "x", + ], + "endIndex": 246, + "startIndex": 246, + }, + { + "$event": "closetag", + "data": [ + "title", + false, + ], + "endIndex": 254, + "startIndex": 247, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 259, + "startIndex": 255, + }, + { + "$event": "opentagname", + "data": [ + "animate", + ], + "endIndex": 268, + "startIndex": 260, + }, + { + "$event": "opentag", + "data": [ + "animate", + {}, + false, + ], + "endIndex": 270, + "startIndex": 260, + }, + { + "$event": "closetag", + "data": [ + "animate", + true, + ], + "endIndex": 270, + "startIndex": 260, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 274, + "startIndex": 271, + }, + { + "$event": "closetag", + "data": [ + "path", + false, + ], + "endIndex": 281, + "startIndex": 275, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 284, + "startIndex": 282, + }, + { + "$event": "closetag", + "data": [ + "g", + false, + ], + "endIndex": 288, + "startIndex": 285, + }, + { + "$event": "text", + "data": [ + " + ", + ], + "endIndex": 290, + "startIndex": 289, + }, + { + "$event": "closetag", + "data": [ + "svg", + false, + ], + "endIndex": 296, + "startIndex": 291, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 297, + "startIndex": 297, + }, + { + "$event": "closetag", + "data": [ + "body", + false, + ], + "endIndex": 304, + "startIndex": 298, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 305, + "startIndex": 305, + }, + { + "$event": "closetag", + "data": [ + "html", + false, + ], + "endIndex": 312, + "startIndex": 306, + }, + { + "$event": "text", + "data": [ + " +", + ], + "endIndex": 313, + "startIndex": 313, + }, +] +`;