Skip to content

Commit d0d81be

Browse files
committed
Throw TypeErrors instead of strings on parser errors
1 parent 4821111 commit d0d81be

File tree

3 files changed

+23
-7
lines changed

3 files changed

+23
-7
lines changed

src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ trait IntoJsResult<T> {
8686
impl<T, E: ToString> IntoJsResult<T> for Result<T, E> {
8787
#[inline]
8888
fn into_js_result(self) -> JsResult<T> {
89-
self.map_err(|e| JsValue::from(e.to_string()))
89+
self.map_err(|e| {
90+
let mut msg = String::from("Parser error: ");
91+
msg.push_str(&e.to_string());
92+
TypeError::new(&msg).into()
93+
})
9094
}
9195
}
9296

test/element.spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,16 @@ test("uses last end tag handler", async (t) => {
257257
.transform("<p>test</p>");
258258
t.is(res, "<p>test2</p>");
259259
});
260+
test("throws error on no end tag", async (t) => {
261+
const res = new HTMLRewriter()
262+
.on("img", {
263+
element(element) {
264+
element.onEndTag(() => t.fail());
265+
},
266+
})
267+
.transform('<img src="" alt="">');
268+
await t.throwsAsync(res, {
269+
instanceOf: TypeError,
270+
message: "Parser error: No end tag.",
271+
});
272+
});

test/selectors.spec.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,9 @@ test("throws error on unsupported selector", async (t) => {
153153
},
154154
})
155155
.transform("<p>old</p>");
156-
// Cannot use t.throwsAsync here as promise rejects with string not error type
157-
try {
158-
await res;
159-
} catch (e) {
160-
t.is(e, "Unsupported pseudo-class or pseudo-element in selector.");
161-
}
156+
await t.throwsAsync(res, {
157+
instanceOf: TypeError,
158+
message:
159+
"Parser error: Unsupported pseudo-class or pseudo-element in selector.",
160+
});
162161
});

0 commit comments

Comments
 (0)