UNPKG

5.52 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const brsTypes_1 = require("./brsTypes");
4class BrsError extends Error {
5 constructor(message, location) {
6 super(message);
7 this.location = location;
8 }
9 /**
10 * Formats the error into a human-readable string including filename, starting and ending line
11 * and column, and the message associated with the error, e.g.:
12 *
13 * `lorem.brs(1,1-3): Expected '(' after sub name`
14 * ```
15 */
16 format() {
17 let location = this.location;
18 let formattedLocation;
19 if (location.start.line === location.end.line) {
20 let columns = `${location.start.column}`;
21 if (location.start.column !== location.end.column) {
22 columns += `-${location.end.column}`;
23 }
24 formattedLocation = `${location.file}(${location.start.line},${columns})`;
25 }
26 else {
27 formattedLocation = `${location.file}(${location.start.line},${location.start.column},${location.end.line},${location.end.line})`;
28 }
29 return `${formattedLocation}: ${this.message}`;
30 }
31}
32exports.BrsError = BrsError;
33/**
34 * Creates a "type mismatch"-like error message, but with the appropriate types specified.
35 * @return a type mismatch error that will be tracked by this module.
36 */
37class TypeMismatch extends BrsError {
38 constructor(mismatchMetadata) {
39 let messageLines = [
40 mismatchMetadata.message,
41 ` left: ${brsTypes_1.ValueKind.toString(getKind(mismatchMetadata.left.type))}`,
42 ];
43 let location = mismatchMetadata.left.location;
44 if (mismatchMetadata.right) {
45 messageLines.push(` right: ${brsTypes_1.ValueKind.toString(getKind(mismatchMetadata.right.type))}`);
46 location.end = mismatchMetadata.right.location.end;
47 }
48 super(messageLines.join("\n"), location);
49 }
50}
51exports.TypeMismatch = TypeMismatch;
52/**
53 * Logs a detected BRS error to console.
54 * @param err the error to log to console
55 */
56function logConsoleError(err) {
57 console.error(err.format());
58}
59exports.logConsoleError = logConsoleError;
60/**
61 * Produces a function that writes errors to the given error stream.
62 * @param errorStream write stream to write errors to.
63 * @returns function that writes to given write stream.
64 */
65function getLoggerUsing(errorStream) {
66 return err => errorStream.write(err.format());
67}
68exports.getLoggerUsing = getLoggerUsing;
69/**
70 * Returns the `.kind` property of a `BrsType`, otherwise returns the provided `ValueKind`.
71 * @param maybeType the `BrsType` to extract a `.kind` field from, or the `ValueKind` to return directly
72 * @returns the `ValueKind` for `maybeType`
73 */
74function getKind(maybeType) {
75 if (typeof maybeType === "number") {
76 return maybeType;
77 }
78 else {
79 return maybeType.kind;
80 }
81}
82//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBZ0Q7QUFHaEQsTUFBYSxRQUFTLFNBQVEsS0FBSztJQUMvQixZQUFZLE9BQWUsRUFBVyxRQUFrQjtRQUNwRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUV4RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTTtRQUNGLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFN0IsSUFBSSxpQkFBeUIsQ0FBQztRQUU5QixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQzNDLElBQUksT0FBTyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUMvQyxPQUFPLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3hDO1lBQ0QsaUJBQWlCLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDO1NBQzdFO2FBQU07WUFDSCxpQkFBaUIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztTQUNySTtRQUVELE9BQU8sR0FBRyxpQkFBaUIsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkQsQ0FBQztDQUNKO0FBN0JELDRCQTZCQztBQXNCRDs7O0dBR0c7QUFDSCxNQUFhLFlBQWEsU0FBUSxRQUFRO0lBQ3RDLFlBQVksZ0JBQXNDO1FBQzlDLElBQUksWUFBWSxHQUFHO1lBQ2YsZ0JBQWdCLENBQUMsT0FBTztZQUN4QixhQUFhLG9CQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtTQUN6RSxDQUFDO1FBQ0YsSUFBSSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUU5QyxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRTtZQUN4QixZQUFZLENBQUMsSUFBSSxDQUNiLGNBQWMsb0JBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQzNFLENBQUM7WUFFRixRQUFRLENBQUMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1NBQ3REO1FBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNKO0FBbEJELG9DQWtCQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxHQUFhO0lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUZELDBDQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxXQUErQjtJQUMxRCxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsd0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxPQUFPLENBQUMsU0FBOEI7SUFDM0MsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7UUFDL0IsT0FBTyxTQUFTLENBQUM7S0FDcEI7U0FBTTtRQUNILE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQztLQUN6QjtBQUNMLENBQUMifQ==
\No newline at end of file