From de8818457cf8ffb44241160513b2f7b78969df7a Mon Sep 17 00:00:00 2001 From: DCloud_LXH <283700113@qq.com> Date: Wed, 18 May 2022 21:04:08 +0800 Subject: [PATCH] chore: uni-stacktracey --- .../dist/uni-stacktracey.cjs.js | 81 +++++++++---------- packages/uni-stacktracey/src/index.ts | 80 +++++++++--------- packages/uni-stacktracey/test/index.js | 8 +- 3 files changed, 85 insertions(+), 84 deletions(-) diff --git a/packages/uni-stacktracey/dist/uni-stacktracey.cjs.js b/packages/uni-stacktracey/dist/uni-stacktracey.cjs.js index 22121a4ea..99f9b782a 100644 --- a/packages/uni-stacktracey/dist/uni-stacktracey.cjs.js +++ b/packages/uni-stacktracey/dist/uni-stacktracey.cjs.js @@ -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 diff --git a/packages/uni-stacktracey/src/index.ts b/packages/uni-stacktracey/src/index.ts index 6507d9b7a..673fa267c 100644 --- a/packages/uni-stacktracey/src/index.ts +++ b/packages/uni-stacktracey/src/index.ts @@ -6,7 +6,6 @@ import { IndexedSourceMapConsumer, Position, } from 'source-map' -import axios from 'axios' const nixSlashes = (x: string) => x.replace(/\\/g, '/') const sourcemapCatch: Record> = {} @@ -39,6 +38,7 @@ interface StacktraceyPreset { * @param filename */ parseSourceMapUrl(file: string, fileName: string): string + getSourceMapContent(file: string, fileName: string): Promise } 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') diff --git a/packages/uni-stacktracey/test/index.js b/packages/uni-stacktracey/test/index.js index 6c8c470c4..b7e431653 100644 --- a/packages/uni-stacktracey/test/index.js +++ b/packages/uni-stacktracey/test/index.js @@ -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)) */ -- GitLab