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

fix: uniStracktraceyPreset

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