added sourcemaps support + sample library, disable member-ordering ts rule
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
"homepage": "https://github.com/screepers/screeps-typescript-starter#readme",
|
"homepage": "https://github.com/screepers/screeps-typescript-starter#readme",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/lodash": "^4.14.85",
|
"@types/lodash": "^4.14.85",
|
||||||
|
"@types/source-map": "^0.5.2",
|
||||||
"rollup": "^0.51.8",
|
"rollup": "^0.51.8",
|
||||||
"rollup-plugin-clean": "^1.0.0",
|
"rollup-plugin-clean": "^1.0.0",
|
||||||
"rollup-plugin-commonjs": "^8.2.6",
|
"rollup-plugin-commonjs": "^8.2.6",
|
||||||
@@ -27,5 +28,8 @@
|
|||||||
"tslint": "^5.8.0",
|
"tslint": "^5.8.0",
|
||||||
"typed-screeps": "^1.0.4",
|
"typed-screeps": "^1.0.4",
|
||||||
"typescript": "^2.6.1"
|
"typescript": "^2.6.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"source-map": "^0.6.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
11
src/main.ts
11
src/main.ts
@@ -1,11 +1,16 @@
|
|||||||
export function loop() {
|
import { ErrorMapper } from "./utils/ErrorMapper";
|
||||||
|
|
||||||
|
export function loop() {
|
||||||
|
try {
|
||||||
// Clear non-existing creep memory.
|
// Clear non-existing creep memory.
|
||||||
for(let name in Memory.creeps) {
|
for (const name in Memory.creeps) {
|
||||||
if(!Game.creeps[name]) {
|
if (!Game.creeps[name]) {
|
||||||
delete Memory[name];
|
delete Memory[name];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`Current tick is ${Game.time}`);
|
console.log(`Current tick is ${Game.time}`);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(ErrorMapper.sourceMappedStackTrace(e));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
2
src/types.d.ts
vendored
Normal file
2
src/types.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
// type shim for nodejs' `require()` syntax
|
||||||
|
declare const require: (module: string) => any;
|
||||||
70
src/utils/ErrorMapper.ts
Normal file
70
src/utils/ErrorMapper.ts
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
// tslint:disable:no-conditional-assignment
|
||||||
|
import {SourceMapConsumer} from "source-map";
|
||||||
|
|
||||||
|
export class ErrorMapper {
|
||||||
|
// Cache consumer
|
||||||
|
private static _consumer?: SourceMapConsumer;
|
||||||
|
|
||||||
|
public static get consumer(): SourceMapConsumer {
|
||||||
|
if (this._consumer == null) {
|
||||||
|
this._consumer = new SourceMapConsumer(require("main.js.map"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._consumer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cache previously mapped traces to improve performance
|
||||||
|
public static cache: { [key: string]: string } = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a stack trace using a source map generate original symbol names.
|
||||||
|
*
|
||||||
|
* WARNING - EXTREMELY high CPU cost for first call after reset - >30 CPU! Use sparingly!
|
||||||
|
* (Consecutive calls after a reset are more reasonable, ~0.1 CPU/ea)
|
||||||
|
*
|
||||||
|
* @param {Error | string} error The error or original stack trace
|
||||||
|
* @returns {string} The source-mapped stack trace
|
||||||
|
*/
|
||||||
|
public static sourceMappedStackTrace(error: Error | string): string {
|
||||||
|
const stack: string = error instanceof Error ? error.stack as string : error;
|
||||||
|
if (this.cache.hasOwnProperty(stack)) {
|
||||||
|
return this.cache[stack];
|
||||||
|
}
|
||||||
|
|
||||||
|
const re = /^\s+at\s+(.+?\s+)?\(?([0-z._\-\\\/]+):(\d+):(\d+)\)?$/gm;
|
||||||
|
let match: RegExpExecArray | null;
|
||||||
|
let outStack = error.toString();
|
||||||
|
|
||||||
|
while (match = re.exec(stack)) {
|
||||||
|
if (match[2] === "main") {
|
||||||
|
const pos = this.consumer.originalPositionFor({
|
||||||
|
line: parseInt(match[3], 10),
|
||||||
|
column: parseInt(match[4], 10)
|
||||||
|
});
|
||||||
|
|
||||||
|
if (pos.line != null) {
|
||||||
|
if (pos.name) {
|
||||||
|
outStack += `\n at ${pos.name} (${pos.source}:${pos.line}:${pos.column})`;
|
||||||
|
} else {
|
||||||
|
if (match[1]) {
|
||||||
|
// no original source file name known - use file name from given trace
|
||||||
|
outStack += `\n at ${match[1]} (${pos.source}:${pos.line}:${pos.column})`;
|
||||||
|
} else {
|
||||||
|
// no original source file name known or in given trace - omit name
|
||||||
|
outStack += `\n at ${pos.source}:${pos.line}:${pos.column}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// no known position
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// no more parseable lines
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.cache[stack] = outStack;
|
||||||
|
return outStack;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
"rules": {
|
"rules": {
|
||||||
"forin": false,
|
"forin": false,
|
||||||
"interface-name": [true, "never-prefix"],
|
"interface-name": [true, "never-prefix"],
|
||||||
|
"member-ordering": [false],
|
||||||
"no-console": [false],
|
"no-console": [false],
|
||||||
"no-namespace": [true, "allow-declarations"],
|
"no-namespace": [true, "allow-declarations"],
|
||||||
"trailing-comma": [true, {"multiline": "never", "singleline": "never"}],
|
"trailing-comma": [true, {"multiline": "never", "singleline": "never"}],
|
||||||
|
|||||||
Reference in New Issue
Block a user