error-position
Advanced tools
+68
-56
@@ -1,5 +0,18 @@ | ||
| const { SourceMapConsumer } = require('source-map') | ||
| const path = require('path') | ||
| const fs = require('fs') | ||
| "use strict"; | ||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
| function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
| return new (P || (P = Promise))(function (resolve, reject) { | ||
| function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
| function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
| function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
| step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
| }); | ||
| }; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const source_map_1 = require("source-map"); | ||
| const path_1 = __importDefault(require("path")); | ||
| const fs_1 = __importDefault(require("fs")); | ||
| /** | ||
@@ -10,15 +23,16 @@ * 输入err:错误堆栈字符串 | ||
| */ | ||
| async function errorPosition(err, sourceMap) { | ||
| // 解析错误堆栈字符串 | ||
| let errStack = parseError(err); | ||
| // 根据错误堆栈和sourceMap文件找到实际位置 | ||
| let result = await sourceMapDeal(sourceMap, errStack); | ||
| return result; | ||
| function errorPosition(err, sourceMap) { | ||
| return __awaiter(this, void 0, void 0, function* () { | ||
| // 解析错误堆栈字符串 | ||
| let errStack = parseError(err); | ||
| // 根据错误堆栈和sourceMap文件找到实际位置 | ||
| let result = yield sourceMapDeal(sourceMap, errStack); | ||
| return result; | ||
| }); | ||
| } | ||
| /** | ||
| * 解析错误堆栈字符串 | ||
| * @param err 错误堆栈字符串 | ||
| * @param err 错误堆栈字符串 | ||
| */ | ||
| function parseError(err) { | ||
| function parseError(err) { | ||
| let arr = err.split('\n'); | ||
@@ -31,6 +45,7 @@ let stack = []; | ||
| message = val; | ||
| } else if (/^(at )/.test(val)) { | ||
| let res = val.match(/[(]{0,1}(\S+):(\d+):(\d+)/); | ||
| } | ||
| else if (/^(at )/.test(val)) { | ||
| let res = val.match(/[(]{0,1}(\S+):[\s]*(\d+)?:(\d+)?/); | ||
| let res1 = val.match(/^at\s+(\S+)\s+\(/); | ||
| if (res) { | ||
| if (res) { | ||
| let url = res[1] ? res[1] : ''; | ||
@@ -44,3 +59,3 @@ let line = res[2] ? res[2] : 0; | ||
| col | ||
| }) | ||
| }); | ||
| } | ||
@@ -52,5 +67,4 @@ } | ||
| stack: stack | ||
| } | ||
| }; | ||
| } | ||
| /** | ||
@@ -61,9 +75,10 @@ * 获取souceMap的consumer | ||
| */ | ||
| async function getSourceMapConsumer(sourceMapPath, filename) { | ||
| let mapPath = path.join(sourceMapPath, filename + '.map'); | ||
| let rawSourceMap = fs.readFileSync(mapPath).toString(); | ||
| let consumer = await new SourceMapConsumer(rawSourceMap); | ||
| return consumer; | ||
| function getSourceMapConsumer(sourceMapPath, filename) { | ||
| return __awaiter(this, void 0, void 0, function* () { | ||
| let mapPath = path_1.default.join(sourceMapPath, filename + '.map'); | ||
| let rawSourceMap = fs_1.default.readFileSync(mapPath).toString(); | ||
| let consumer = yield new source_map_1.SourceMapConsumer(rawSourceMap); | ||
| return consumer; | ||
| }); | ||
| } | ||
| /** | ||
@@ -74,21 +89,22 @@ * 处理souceMpa文件 | ||
| */ | ||
| async function sourceMapDeal(sourceMapPath, errStack) { | ||
| let stack = errStack.stack; | ||
| let consumerObj = {}; | ||
| let result = []; | ||
| for (let i = 0; i < stack.length; i++) { | ||
| let value = stack[i]; | ||
| let url = value.url; | ||
| let res = url.match(/[\/\(\s\\]([A-Za-z_-]+.js)$/) | ||
| let filename = res && res[1] ? res[1] : false; | ||
| if (filename && !consumerObj[filename]) { | ||
| let consumer = await getSourceMapConsumer(sourceMapPath, filename); | ||
| consumerObj[filename] = consumer; | ||
| function sourceMapDeal(sourceMapPath, errStack) { | ||
| return __awaiter(this, void 0, void 0, function* () { | ||
| let stack = errStack.stack; | ||
| let consumerObj = {}; | ||
| let result = []; | ||
| for (let i = 0; i < stack.length; i++) { | ||
| let value = stack[i]; | ||
| let url = value.url; | ||
| let res = url.match(/[\/\(\s\\]([A-Za-z_-]+.js)$/); | ||
| let filename = res && res[1] ? res[1] : false; | ||
| if (filename && !consumerObj[filename]) { | ||
| let consumer = yield getSourceMapConsumer(sourceMapPath, filename); | ||
| consumerObj[filename] = consumer; | ||
| } | ||
| let obj = getSourceCode(consumerObj[filename] || '', value); | ||
| result.push(obj); | ||
| } | ||
| let obj = getSourceCode(consumerObj[filename] || '', value); | ||
| result.push(obj); | ||
| } | ||
| return result; | ||
| return result; | ||
| }); | ||
| } | ||
| /** | ||
@@ -99,4 +115,4 @@ * 获取源码所在位置、所在行代码等信息 | ||
| */ | ||
| function getSourceCode(consumer, stack) { | ||
| if (!consumer) { | ||
| function getSourceCode(consumer, stack) { | ||
| if (!consumer) { | ||
| return { | ||
@@ -108,4 +124,4 @@ stack: stack, | ||
| let sm = consumer.originalPositionFor({ | ||
| line: parseInt(stack.line), // 压缩后的行数 | ||
| column: parseInt(stack.col) // 压缩后的列数 | ||
| line: parseInt(stack.line), | ||
| column: parseInt(stack.col) // 压缩后的列数 | ||
| }); | ||
@@ -120,16 +136,12 @@ // 压缩前的所有源文件列表 | ||
| const rawLines = smContent.split(/\r?\n/g); | ||
| return Object.assign(Object.assign({ code: rawLines[sm.line - 1] }, sm), { stack: stack, ret: true }); | ||
| } | ||
| else { | ||
| return { | ||
| code: rawLines[sm.line - 1], | ||
| ...sm, | ||
| stack: stack, | ||
| ret: true | ||
| }; | ||
| } else { | ||
| return { | ||
| stack: stack, | ||
| ret: false | ||
| }; | ||
| } | ||
| } | ||
| } | ||
| module.exports = errorPosition; | ||
| exports.default = errorPosition; | ||
| //# sourceMappingURL=index.js.map |
+7
-3
| { | ||
| "name": "error-position", | ||
| "version": "1.0.1", | ||
| "version": "1.0.2", | ||
| "author": "jingjing", | ||
@@ -15,3 +15,5 @@ "description": "根据js常见错误堆栈字符串和sourceMap文件路径定位错误位置", | ||
| "scripts": { | ||
| "dev": "node index.js" | ||
| "dev": "node index.js", | ||
| "compile": "tsc -p ./", | ||
| "watch": "tsc -watch -p ./" | ||
| }, | ||
@@ -27,3 +29,5 @@ "repository": { | ||
| "homepage": "https://github.com/jingjinghahah/errorPosition#readme", | ||
| "devDependencies": {}, | ||
| "devDependencies": { | ||
| "@types/node": "^13.11.1" | ||
| }, | ||
| "dependencies": { | ||
@@ -30,0 +34,0 @@ "source-map": "^0.7.3" |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
6862
23.89%137
15.13%1
Infinity%