blob: c754cc9339b9a664c6bafb943ea3bc395569ce9d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// This JS module contains shared functionality for the generated UniFFI JS
// code.
// TypeError for UniFFI calls
//
// This extends TypeError to add support for recording a nice description of
// the item that fails the type check. This is especially useful for invalid
// values nested in objects/arrays/maps, etc.
//
// To accomplish this, the FfiConverter.checkType methods of records, arrays,
// maps, etc. catch UniFFITypeError, call `addItemDescriptionPart()` with a
// string representing the child item, then re-raise the exception. We then
// join all the parts together, in reverse order, to create item description
// strings like `foo.bar[123]["key"]`
export class UniFFITypeError extends TypeError {
constructor(reason) {
super();
this.reason = reason;
this.itemDescriptionParts = [];
}
addItemDescriptionPart(part) {
this.itemDescriptionParts.push(part);
}
itemDescription() {
const itemDescriptionParts = [...this.itemDescriptionParts];
itemDescriptionParts.reverse();
return itemDescriptionParts.join("");
}
get message() {
return `${this.itemDescription()}: ${this.reason}`;
}
}
|