提交 de881845 编写于 作者: D DCloud_LXH

chore: uni-stacktracey

上级 7b82ae5c
......@@ -5,55 +5,43 @@ Object.defineProperty(exports, '__esModule', { value: true });
var fs = require('fs');
var StackTracey = require('stacktracey');
var sourceMap = require('source-map');
var axios = require('axios');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
var StackTracey__default = /*#__PURE__*/_interopDefaultLegacy(StackTracey);
var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
const isBrowser = typeof globalThis !== 'undefined' && globalThis.window === globalThis && globalThis.navigator;
const nixSlashes = (x) => x.replace(/\\/g, '/');
const sourcemapCatch = {};
if (isBrowser) {
// @ts-ignore
sourceMap.SourceMapConsumer.initialize({
'lib/mappings.wasm': 'https://unpkg.com/source-map@0.7.3/lib/mappings.wasm',
});
}
function stacktracey(stacktrace, opts) {
const parseStack = [];
const stack = opts.preset.parseStacktrace(stacktrace);
stack.items.forEach((item, index) => {
const fn = () => {
const { line = 0, column = 0, file, fileName } = item;
let sourceMapUrl;
try {
sourceMapUrl = opts.preset.parseSourceMapUrl(file, fileName);
if (sourceMapUrl) {
return Promise.resolve(getSourceMapContent(sourceMapUrl)).then((content) => {
if (content)
return sourceMap.SourceMapConsumer.with(content, null, (consumer) => {
const sourceMapContent = parseSourceMapContent(consumer, {
line,
column,
});
if (sourceMapContent) {
const { source, sourcePath, sourceLine, sourceColumn, fileName = '', } = sourceMapContent;
stack.items[index] = Object.assign({}, item, {
file: source,
line: sourceLine,
column: sourceColumn,
fileShort: sourcePath,
fileRelative: sourcePath,
fileName,
});
}
return opts.preset
.getSourceMapContent(file, fileName)
.then((content) => {
if (content)
return sourceMap.SourceMapConsumer.with(content, null, (consumer) => {
const sourceMapContent = parseSourceMapContent(consumer, {
line,
column,
});
});
}
return Promise.resolve();
if (sourceMapContent) {
const { source, sourcePath, sourceLine, sourceColumn, fileName = '', } = sourceMapContent;
stack.items[index] = Object.assign({}, item, {
file: source,
line: sourceLine,
column: sourceColumn,
fileShort: sourcePath,
fileRelative: sourcePath,
fileName,
});
}
});
});
}
catch (error) {
return Promise.resolve();
......@@ -85,16 +73,16 @@ function getSourceMapContent(sourcemapUrl) {
(sourcemapCatch[sourcemapUrl] = new Promise((resolve, reject) => {
try {
if (/^[a-z]+:/i.test(sourcemapUrl)) {
axios__default["default"]
.get(sourcemapUrl)
.then((res) => {
console.log('sourcemapUrl :>> ', sourcemapUrl);
sourcemapCatch[sourcemapUrl] = res.data;
resolve(sourcemapCatch[sourcemapUrl]);
})
.catch((_) => {
resolve('');
});
/* uni
.request(sourcemapUrl)
.then((res) => {
console.log('sourcemapUrl :>> ', sourcemapUrl)
sourcemapCatch[sourcemapUrl] = res.data
resolve(sourcemapCatch[sourcemapUrl])
})
.catch((_) => {
resolve('')
}) */
}
else {
sourcemapCatch[sourcemapUrl] = fs__default["default"].readFileSync(sourcemapUrl, 'utf-8');
......@@ -136,6 +124,9 @@ function uniStracktraceyPreset(opts) {
// 根据 base,platform,version,filename 组合 sourceMapUrl
return `${base}/${version}/.sourcemap/${platform}/${file.split('.')[0]}.js.map`;
},
getSourceMapContent(file, fileName) {
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
},
parseStacktrace(stacktrace) {
return (stack = new StackTracey__default["default"](stacktrace));
},
......@@ -154,6 +145,10 @@ function utsStracktraceyPreset(opts) {
// 根据 base,filename 组合 sourceMapUrl
return `${opts.base}/${fileName}.map`;
},
getSourceMapContent(file, fileName) {
// 根据 base,filename 组合 sourceMapUrl
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
},
parseStacktrace(str) {
const lines = (str || '').split('\n');
const entries = lines
......
......@@ -6,7 +6,6 @@ import {
IndexedSourceMapConsumer,
Position,
} from 'source-map'
import axios from 'axios'
const nixSlashes = (x: string) => x.replace(/\\/g, '/')
const sourcemapCatch: Record<string, string | Promise<string>> = {}
......@@ -39,6 +38,7 @@ interface StacktraceyPreset {
* @param filename
*/
parseSourceMapUrl(file: string, fileName: string): string
getSourceMapContent(file: string, fileName: string): Promise<string>
}
interface StacktraceyOptions {
......@@ -56,42 +56,37 @@ export function stacktracey(
stack.items.forEach((item, index) => {
const fn = () => {
const { line = 0, column = 0, file, fileName } = item
let sourceMapUrl
try {
sourceMapUrl = opts.preset.parseSourceMapUrl(file, fileName)
if (sourceMapUrl) {
return Promise.resolve(getSourceMapContent(sourceMapUrl)).then(
(content) => {
if (content)
return SourceMapConsumer.with(content, null, (consumer) => {
const sourceMapContent = parseSourceMapContent(consumer, {
line,
column,
})
return opts.preset
.getSourceMapContent(file, fileName)
.then((content) => {
if (content)
return SourceMapConsumer.with(content, null, (consumer) => {
const sourceMapContent = parseSourceMapContent(consumer, {
line,
column,
})
if (sourceMapContent) {
const {
source,
sourcePath,
sourceLine,
sourceColumn,
fileName = '',
} = sourceMapContent
if (sourceMapContent) {
const {
source,
sourcePath,
sourceLine,
sourceColumn,
fileName = '',
} = sourceMapContent
stack.items[index] = Object.assign({}, item, {
file: source,
line: sourceLine,
column: sourceColumn,
fileShort: sourcePath,
fileRelative: sourcePath,
fileName,
})
}
})
}
)
}
return Promise.resolve()
stack.items[index] = Object.assign({}, item, {
file: source,
line: sourceLine,
column: sourceColumn,
fileShort: sourcePath,
fileRelative: sourcePath,
fileName,
})
}
})
})
} catch (error) {
return Promise.resolve()
}
......@@ -125,8 +120,8 @@ function getSourceMapContent(sourcemapUrl: string) {
(sourcemapCatch[sourcemapUrl] = new Promise((resolve, reject) => {
try {
if (/^[a-z]+:/i.test(sourcemapUrl)) {
axios
.get(sourcemapUrl)
/* uni
.request(sourcemapUrl)
.then((res) => {
console.log('sourcemapUrl :>> ', sourcemapUrl)
sourcemapCatch[sourcemapUrl] = res.data
......@@ -134,7 +129,7 @@ function getSourceMapContent(sourcemapUrl: string) {
})
.catch((_) => {
resolve('')
})
}) */
} else {
sourcemapCatch[sourcemapUrl] = fs.readFileSync(
sourcemapUrl,
......@@ -207,6 +202,11 @@ export function uniStracktraceyPreset(
file.split('.')[0]
}.js.map`
},
getSourceMapContent(file, fileName) {
return Promise.resolve(
getSourceMapContent(this.parseSourceMapUrl(file, fileName))
)
},
parseStacktrace(stacktrace) {
return (stack = new StackTracey(stacktrace))
},
......@@ -238,6 +238,12 @@ export function utsStracktraceyPreset(
// 根据 base,filename 组合 sourceMapUrl
return `${opts.base}/${fileName}.map`
},
getSourceMapContent(file, fileName) {
// 根据 base,filename 组合 sourceMapUrl
return Promise.resolve(
getSourceMapContent(this.parseSourceMapUrl(file, fileName))
)
},
parseStacktrace(str) {
const lines = (str || '').split('\n')
......
......@@ -13,7 +13,7 @@ e: [PackagePath]/wgtRoot/__UNI__E070870/nativeplugins/DCloud-UTSPlugin/android/s
FAILURE: Build failed with an exception.`
/* stacktracey(
stacktracey(
`ReferenceError: Sentry is not defined
at Proxy.throwError(/vue3/assets/pages-index-index.4077a069.js:1:295)
at e(/vue3/assets/index.2be9343a.js:1:52317)
......@@ -28,11 +28,11 @@ FAILURE: Build failed with an exception.`
version: '1.0.0',
}),
}
).then((res) => console.log(res)) */
).then((res) => console.log(res))
stacktracey(utsErrorMsg, {
/* stacktracey(utsErrorMsg, {
preset: utsStracktraceyPreset({
base: '/wgtRoot/__UNI__E070870/nativeplugins/DCloud-UTSPlugin/android/src/io/dcloud/uniplugin',
sourceRoot: '',
}),
}).then((res) => console.log(res))
}).then((res) => console.log(res)) */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册