mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
87 lines
1.9 KiB
TypeScript
87 lines
1.9 KiB
TypeScript
import { knownFolders } from "../file-system";
|
|
import { isAndroid } from "../platform";
|
|
|
|
export let debug = true;
|
|
|
|
let applicationRootPath: string;
|
|
function ensureAppRootPath() {
|
|
if (!applicationRootPath) {
|
|
applicationRootPath = knownFolders.currentApp().path;
|
|
applicationRootPath = applicationRootPath.substr(
|
|
0,
|
|
applicationRootPath.length - "app/".length
|
|
);
|
|
}
|
|
}
|
|
|
|
export class Source {
|
|
private _uri: string;
|
|
private _line: number;
|
|
private _column: number;
|
|
|
|
private static _source: symbol = Symbol("source");
|
|
|
|
constructor(uri: string, line: number, column: number) {
|
|
ensureAppRootPath();
|
|
|
|
if (
|
|
uri.length > applicationRootPath.length &&
|
|
uri.substr(0, applicationRootPath.length) === applicationRootPath
|
|
) {
|
|
this._uri = "file://" + uri.substr(applicationRootPath.length);
|
|
} else {
|
|
this._uri = uri;
|
|
}
|
|
this._line = line;
|
|
this._column = column;
|
|
}
|
|
|
|
get uri(): string {
|
|
return this._uri;
|
|
}
|
|
get line(): number {
|
|
return this._line;
|
|
}
|
|
get column(): number {
|
|
return this._column;
|
|
}
|
|
|
|
public toString() {
|
|
return this._uri + ":" + this._line + ":" + this._column;
|
|
}
|
|
|
|
public static get(object: any): Source {
|
|
return object[Source._source];
|
|
}
|
|
|
|
public static set(object: any, src: Source) {
|
|
object[Source._source] = src;
|
|
}
|
|
}
|
|
|
|
export class ScopeError extends Error {
|
|
constructor(inner: Error, message?: string) {
|
|
let formattedMessage;
|
|
if (message && inner.message) {
|
|
formattedMessage =
|
|
message + "\n > " + inner.message.replace("\n", "\n ");
|
|
} else {
|
|
formattedMessage = message || inner.message || undefined;
|
|
}
|
|
super(formattedMessage);
|
|
this.stack = isAndroid
|
|
? "Error: " +
|
|
this.message +
|
|
"\n" +
|
|
inner.stack.substr(inner.stack.indexOf("\n") + 1)
|
|
: inner.stack;
|
|
this.message = formattedMessage;
|
|
}
|
|
}
|
|
|
|
export class SourceError extends ScopeError {
|
|
constructor(child: Error, source: Source, message?: string) {
|
|
super(child, message ? message + " @" + source + "" : source + "");
|
|
}
|
|
}
|