提交 de881845 编写于 作者: D DCloud_LXH

chore: uni-stacktracey

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