提交 654930b0 编写于 作者: D DCloud_LXH

fix: uniStracktraceyPreset

上级 281b4d55
......@@ -15,9 +15,6 @@
"dist/uni-stacktracey.es.js"
]
},
"output": {
"format": "es"
},
"replacements": {
"__PLATFORM_WEB__": "true"
}
......
......@@ -18,13 +18,13 @@ function stacktracey(stacktrace, opts) {
const stack = opts.preset.parseStacktrace(stacktrace);
stack.items.forEach((item, index) => {
const fn = () => {
const { line = 0, column = 0, file, fileName } = item;
const { line = 0, column = 0, file, fileName, fileRelative } = item;
try {
return opts.preset
.getSourceMapContent(file, fileName)
.getSourceMapContent(file, fileName, fileRelative)
.then((content) => {
if (content)
return sourceMap.SourceMapConsumer.with(content, null, (consumer) => {
if (content) {
return getConsumer(content).then((consumer) => {
const sourceMapContent = parseSourceMapContent(consumer, {
line,
column,
......@@ -41,6 +41,7 @@ function stacktracey(stacktrace, opts) {
});
}
});
}
});
}
catch (error) {
......@@ -68,6 +69,19 @@ function stacktracey(stacktrace, opts) {
});
});
}
function getConsumer(content) {
return new Promise((resolve, reject) => {
if (sourceMap.SourceMapConsumer.with) {
sourceMap.SourceMapConsumer.with(content, null, (consumer) => {
resolve(consumer);
});
}
else {
// @ts-ignore
resolve(sourceMap.SourceMapConsumer(content));
}
});
}
function getSourceMapContent(sourcemapUrl) {
try {
return (sourcemapCatch[sourcemapUrl] ||
......@@ -115,20 +129,19 @@ function parseSourceMapContent(consumer, obj) {
function uniStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
return {
parseSourceMapUrl(file, fileName) {
parseSourceMapUrl(file, fileName, fileRelative) {
// 组合 sourceMapUrl
if (!base)
return '';
file = (file.match(/(\/.*)/) || [])[1];
if (!file)
if (fileRelative.indexOf('(') !== -1)
fileRelative = fileRelative.match(/\((.*)/)[1];
if (!base || !fileRelative)
return '';
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`;
return `${fileRelative.replace(sourceRoot, base + '/')}.map`;
}
return `${base}/${file}.map`;
return `${base}/${fileRelative}.map`;
},
getSourceMapContent(file, fileName) {
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
getSourceMapContent(file, fileName, fileRelative) {
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName, fileRelative)));
},
parseStacktrace(stacktrace) {
return new StackTracey__default["default"](stacktrace);
......@@ -144,16 +157,16 @@ function utsStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
let errStack = [];
return {
parseSourceMapUrl(file, fileName) {
parseSourceMapUrl(file, fileName, fileRelative) {
// 组合 sourceMapUrl
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`;
}
return `${base}/${file}.map`;
},
getSourceMapContent(file, fileName) {
getSourceMapContent(file, fileName, fileRelative) {
// 根据 base,filename 组合 sourceMapUrl
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName, fileRelative)));
},
parseStacktrace(str) {
const lines = (str || '').split('\n');
......
......@@ -2,13 +2,6 @@ import fs from 'fs';
import StackTracey from 'stacktracey';
import { SourceMapConsumer } from 'source-map';
// @ts-ignore
{
// @ts-ignore
SourceMapConsumer.initialize({
'lib/mappings.wasm': 'https://unpkg.com/source-map@0.7.3/lib/mappings.wasm',
});
}
const nixSlashes = (x) => x.replace(/\\/g, '/');
const sourcemapCatch = {};
function stacktracey(stacktrace, opts) {
......@@ -16,13 +9,13 @@ function stacktracey(stacktrace, opts) {
const stack = opts.preset.parseStacktrace(stacktrace);
stack.items.forEach((item, index) => {
const fn = () => {
const { line = 0, column = 0, file, fileName } = item;
const { line = 0, column = 0, file, fileName, fileRelative } = item;
try {
return opts.preset
.getSourceMapContent(file, fileName)
.getSourceMapContent(file, fileName, fileRelative)
.then((content) => {
if (content)
return SourceMapConsumer.with(content, null, (consumer) => {
if (content) {
return getConsumer(content).then((consumer) => {
const sourceMapContent = parseSourceMapContent(consumer, {
line,
column,
......@@ -39,6 +32,7 @@ function stacktracey(stacktrace, opts) {
});
}
});
}
});
}
catch (error) {
......@@ -66,6 +60,19 @@ function stacktracey(stacktrace, opts) {
});
});
}
function getConsumer(content) {
return new Promise((resolve, reject) => {
if (SourceMapConsumer.with) {
SourceMapConsumer.with(content, null, (consumer) => {
resolve(consumer);
});
}
else {
// @ts-ignore
resolve(SourceMapConsumer(content));
}
});
}
function getSourceMapContent(sourcemapUrl) {
try {
return (sourcemapCatch[sourcemapUrl] ||
......@@ -113,20 +120,19 @@ function parseSourceMapContent(consumer, obj) {
function uniStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
return {
parseSourceMapUrl(file, fileName) {
parseSourceMapUrl(file, fileName, fileRelative) {
// 组合 sourceMapUrl
if (!base)
return '';
file = (file.match(/(\/.*)/) || [])[1];
if (!file)
if (fileRelative.indexOf('(') !== -1)
fileRelative = fileRelative.match(/\((.*)/)[1];
if (!base || !fileRelative)
return '';
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`;
return `${fileRelative.replace(sourceRoot, base + '/')}.map`;
}
return `${base}/${file}.map`;
return `${base}/${fileRelative}.map`;
},
getSourceMapContent(file, fileName) {
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
getSourceMapContent(file, fileName, fileRelative) {
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName, fileRelative)));
},
parseStacktrace(stacktrace) {
return new StackTracey(stacktrace);
......@@ -142,16 +148,16 @@ function utsStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
let errStack = [];
return {
parseSourceMapUrl(file, fileName) {
parseSourceMapUrl(file, fileName, fileRelative) {
// 组合 sourceMapUrl
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`;
}
return `${base}/${file}.map`;
},
getSourceMapContent(file, fileName) {
getSourceMapContent(file, fileName, fileRelative) {
// 根据 base,filename 组合 sourceMapUrl
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName, fileRelative)));
},
parseStacktrace(str) {
const lines = (str || '').split('\n');
......
......@@ -7,14 +7,6 @@ import {
Position,
} from 'source-map'
// @ts-ignore
if (__PLATFORM_WEB__) {
// @ts-ignore
SourceMapConsumer.initialize({
'lib/mappings.wasm': 'https://unpkg.com/source-map@0.7.3/lib/mappings.wasm',
})
}
const nixSlashes = (x: string) => x.replace(/\\/g, '/')
const sourcemapCatch: Record<string, string | Promise<string>> = {}
......@@ -46,8 +38,16 @@ interface StacktraceyPreset {
* 编译后的文件名
* @param fileName
*/
parseSourceMapUrl(file: string, fileName: string): string
getSourceMapContent(file: string, fileName: string): Promise<string>
parseSourceMapUrl(
file: string,
fileName: string,
fileRelative: string
): string
getSourceMapContent(
file: string,
fileName: string,
fileRelative: string
): Promise<string>
}
interface StacktraceyOptions {
......@@ -64,13 +64,13 @@ export function stacktracey(
stack.items.forEach((item, index) => {
const fn = () => {
const { line = 0, column = 0, file, fileName } = item
const { line = 0, column = 0, file, fileName, fileRelative } = item
try {
return opts.preset
.getSourceMapContent(file, fileName)
.getSourceMapContent(file, fileName, fileRelative)
.then((content) => {
if (content)
return SourceMapConsumer.with(content, null, (consumer) => {
if (content) {
return getConsumer(content).then((consumer) => {
const sourceMapContent = parseSourceMapContent(consumer, {
line,
column,
......@@ -95,6 +95,7 @@ export function stacktracey(
})
}
})
}
})
} catch (error) {
return Promise.resolve()
......@@ -123,6 +124,21 @@ export function stacktracey(
})
}
function getConsumer(
content: string
): Promise<BasicSourceMapConsumer | IndexedSourceMapConsumer> {
return new Promise((resolve, reject) => {
if (SourceMapConsumer.with) {
SourceMapConsumer.with(content, null, (consumer) => {
resolve(consumer)
})
} else {
// @ts-ignore
resolve(SourceMapConsumer(content))
}
})
}
function getSourceMapContent(sourcemapUrl: string) {
try {
return (
......@@ -198,19 +214,21 @@ export function uniStracktraceyPreset(
const { base, sourceRoot } = opts
return {
parseSourceMapUrl(file, fileName) {
parseSourceMapUrl(file, fileName, fileRelative) {
// 组合 sourceMapUrl
if (!base) return ''
file = (file.match(/(\/.*)/) || [])[1]
if (!file) return ''
if (fileRelative.indexOf('(') !== -1)
fileRelative = fileRelative.match(/\((.*)/)![1]
if (!base || !fileRelative) return ''
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`
return `${fileRelative.replace(sourceRoot, base + '/')}.map`
}
return `${base}/${file}.map`
return `${base}/${fileRelative}.map`
},
getSourceMapContent(file, fileName) {
getSourceMapContent(file, fileName, fileRelative) {
return Promise.resolve(
getSourceMapContent(this.parseSourceMapUrl(file, fileName))
getSourceMapContent(
this.parseSourceMapUrl(file, fileName, fileRelative)
)
)
},
parseStacktrace(stacktrace) {
......@@ -244,17 +262,19 @@ export function utsStracktraceyPreset(
let errStack: string[] = []
return {
parseSourceMapUrl(file, fileName) {
parseSourceMapUrl(file, fileName, fileRelative) {
// 组合 sourceMapUrl
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`
}
return `${base}/${file}.map`
},
getSourceMapContent(file, fileName) {
getSourceMapContent(file, fileName, fileRelative) {
// 根据 base,filename 组合 sourceMapUrl
return Promise.resolve(
getSourceMapContent(this.parseSourceMapUrl(file, fileName))
getSourceMapContent(
this.parseSourceMapUrl(file, fileName, fileRelative)
)
)
},
parseStacktrace(str) {
......
......@@ -31,19 +31,15 @@ at HTMLElement.n(/static/js/chunk-vendors.75525bd5.js:34:13824)
at HTMLElement.o._wrapper(/static/js/chunk-vendors.75525bd5.js:34:53966)
at HTMLElement.i(/static/js/chunk-vendors.75525bd5.js:7:609894)`
/* stacktracey(uniErrorMsg, {
stacktracey(uniErrorMsg, {
preset: uniStracktraceyPreset({
base: path.resolve(__dirname, './__UNI__APPID__/1.0.0/.sourcemap/h5/'),
sourceRoot: '',
}),
}).then((res) => {
console.log('res :>> ', res)
}) */
console.log(
'path.resolve(__dirname, "./nativeplugins-sourceMap/DCloud-UTSPlugin/"), :>> ',
path.resolve(__dirname, './nativeplugins-sourceMap/DCloud-UTSPlugin/')
)
stacktracey(utsErrorMsg, {
})
/* stacktracey(utsErrorMsg, {
preset: utsStracktraceyPreset({
base: path.resolve(
__dirname,
......@@ -54,3 +50,4 @@ stacktracey(utsErrorMsg, {
}).then((res) => {
console.log('res :>> ', res)
})
*/
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册