diff --git a/packages/uni-stacktracey/build.json b/packages/uni-stacktracey/build.json index b79c1fca69a5372460f4fc43ce2e994e2ae8d7a5..73c6a35871473fa740b95e36d4641aa307035798 100644 --- a/packages/uni-stacktracey/build.json +++ b/packages/uni-stacktracey/build.json @@ -15,9 +15,6 @@ "dist/uni-stacktracey.es.js" ] }, - "output": { - "format": "es" - }, "replacements": { "__PLATFORM_WEB__": "true" } diff --git a/packages/uni-stacktracey/dist/uni-stacktracey.cjs.js b/packages/uni-stacktracey/dist/uni-stacktracey.cjs.js index 9832e0eb4c215389aa2bc34b1f7ca9246ce8d2c0..3ed5bc1e61e6c030c7aa877bf51a7ffaca66e7f4 100644 --- a/packages/uni-stacktracey/dist/uni-stacktracey.cjs.js +++ b/packages/uni-stacktracey/dist/uni-stacktracey.cjs.js @@ -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'); diff --git a/packages/uni-stacktracey/dist/uni-stacktracey.es.js b/packages/uni-stacktracey/dist/uni-stacktracey.es.js index 6ab12bfbb4a1e91dc3b02e181a1a1f364b506d4b..c6437aaff4b6afbab4d49c7bf02ad258cb45a249 100644 --- a/packages/uni-stacktracey/dist/uni-stacktracey.es.js +++ b/packages/uni-stacktracey/dist/uni-stacktracey.es.js @@ -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'); diff --git a/packages/uni-stacktracey/src/index.ts b/packages/uni-stacktracey/src/index.ts index 4c9f4b5e9671fe5a5d12eac3e7d915a8315fe9fb..1ee65b16c046811f0b5757e6d3ee448f683ff366 100644 --- a/packages/uni-stacktracey/src/index.ts +++ b/packages/uni-stacktracey/src/index.ts @@ -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> = {} @@ -46,8 +38,16 @@ interface StacktraceyPreset { * 编译后的文件名 * @param fileName */ - parseSourceMapUrl(file: string, fileName: string): string - getSourceMapContent(file: string, fileName: string): Promise + parseSourceMapUrl( + file: string, + fileName: string, + fileRelative: string + ): string + getSourceMapContent( + file: string, + fileName: string, + fileRelative: string + ): Promise } 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 { + 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) { diff --git a/packages/uni-stacktracey/test/index.js b/packages/uni-stacktracey/test/index.js index df12a381bcfaca548141b2b31882c5b37b77fdca..9289e94fec84aaefff6215d6a95fb9b60bda1c7a 100644 --- a/packages/uni-stacktracey/test/index.js +++ b/packages/uni-stacktracey/test/index.js @@ -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) }) + */