提交 71080cf1 编写于 作者: fxy060608's avatar fxy060608

feat(push): normalize message

上级 51fd8186
......@@ -24,9 +24,24 @@ interface OnPushClickCallback {
let cid: string | undefined
let cidErrMsg: string | undefined
function normalizePushMessage(message: unknown) {
function normalizePushMessage(type: 'receive' | 'click', message: unknown) {
try {
return JSON.parse(message as string)
const res = JSON.parse(message as string) as Record<string, any>
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps
}
return res.payload
}
} else if (type === 'click') {
delete res.type
delete res.__UUID__
delete res.appid
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title
}
}
} catch (e: any) {}
return message
}
......@@ -47,11 +62,17 @@ export function invokePushCallback(
invokeGetPushCidCallbacks(cid, args.errMsg)
} else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) })
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
})
})
} else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) })
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
})
})
}
}
......
......@@ -11057,9 +11057,25 @@ const getLaunchOptionsSync = defineSyncApi(API_GET_LAUNCH_OPTIONS_SYNC, () => {
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
}
else if (type === 'click') {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
}
catch (e) { }
return message;
......@@ -11076,12 +11092,18 @@ function invokePushCallback(args) {
}
else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) });
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
});
});
}
else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) });
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
});
});
}
}
......
......@@ -4564,9 +4564,24 @@ const getLaunchOptionsSync = /* @__PURE__ */ defineSyncApi(API_GET_LAUNCH_OPTION
});
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === "receive") {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
} else if (type === "click") {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
} catch (e2) {
}
return message;
......@@ -4578,11 +4593,17 @@ function invokePushCallback(args) {
invokeGetPushCidCallbacks(cid, args.errMsg);
} else if (args.type === "pushMsg") {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: "receive", data: normalizePushMessage(args.message) });
callback({
type: "receive",
data: normalizePushMessage("receive", args.message)
});
});
} else if (args.type === "click") {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: "click", data: normalizePushMessage(args.message) });
callback({
type: "click",
data: normalizePushMessage("click", args.message)
});
});
}
}
......
......@@ -540,9 +540,25 @@ const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
}
else if (type === 'click') {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
}
catch (e) { }
return message;
......@@ -559,12 +575,18 @@ function invokePushCallback(args) {
}
else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) });
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
});
});
}
else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) });
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
});
});
}
}
......
......@@ -540,9 +540,25 @@ const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
}
else if (type === 'click') {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
}
catch (e) { }
return message;
......@@ -559,12 +575,18 @@ function invokePushCallback(args) {
}
else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) });
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
});
});
}
else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) });
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
});
});
}
}
......
......@@ -540,9 +540,25 @@ const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
}
else if (type === 'click') {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
}
catch (e) { }
return message;
......@@ -559,12 +575,18 @@ function invokePushCallback(args) {
}
else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) });
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
});
});
}
else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) });
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
});
});
}
}
......
......@@ -540,9 +540,25 @@ const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
}
else if (type === 'click') {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
}
catch (e) { }
return message;
......@@ -559,12 +575,18 @@ function invokePushCallback(args) {
}
else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) });
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
});
});
}
else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) });
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
});
});
}
}
......
......@@ -540,9 +540,25 @@ const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
}
else if (type === 'click') {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
}
catch (e) { }
return message;
......@@ -559,12 +575,18 @@ function invokePushCallback(args) {
}
else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) });
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
});
});
}
else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) });
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
});
});
}
}
......
......@@ -540,9 +540,25 @@ const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
}
else if (type === 'click') {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
}
catch (e) { }
return message;
......@@ -559,12 +575,18 @@ function invokePushCallback(args) {
}
else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) });
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
});
});
}
else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) });
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
});
});
}
}
......
......@@ -504,9 +504,25 @@ const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
}
else if (type === 'click') {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
}
catch (e) { }
return message;
......@@ -523,12 +539,18 @@ function invokePushCallback(args) {
}
else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) });
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
});
});
}
else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) });
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
});
});
}
}
......
......@@ -540,9 +540,25 @@ const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
let cid;
let cidErrMsg;
function normalizePushMessage(message) {
function normalizePushMessage(type, message) {
try {
return JSON.parse(message);
const res = JSON.parse(message);
if (type === 'receive') {
if (res.payload) {
if (res.aps) {
res.payload.aps = res.aps;
}
return res.payload;
}
}
else if (type === 'click') {
delete res.type;
delete res.__UUID__;
delete res.appid;
if (res.aps && res.aps.alert) {
res.title = res.aps.alert.title;
}
}
}
catch (e) { }
return message;
......@@ -559,12 +575,18 @@ function invokePushCallback(args) {
}
else if (args.type === 'pushMsg') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'receive', data: normalizePushMessage(args.message) });
callback({
type: 'receive',
data: normalizePushMessage('receive', args.message),
});
});
}
else if (args.type === 'click') {
onPushMessageCallbacks.forEach((callback) => {
callback({ type: 'click', data: normalizePushMessage(args.message) });
callback({
type: 'click',
data: normalizePushMessage('click', args.message),
});
});
}
}
......
......@@ -2,209 +2,209 @@ 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) {
const parseStack = [];
const stack = opts.preset.parseStacktrace(stacktrace);
stack.items.forEach((item, index) => {
const fn = () => {
const { line = 0, column = 0, file, fileName } = item;
try {
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;
stack.items[index] = Object.assign({}, item, {
file: source,
line: sourceLine,
column: sourceColumn,
fileShort: sourcePath,
fileRelative: sourcePath,
fileName,
});
}
});
});
}
catch (error) {
return Promise.resolve();
}
};
parseStack.push(fn());
});
return new Promise((resolve, reject) => {
Promise.all(parseStack)
.then(() => {
const parseError = opts.preset.asTableStacktrace({
stack,
maxColumnWidths: {
callee: 999,
file: 999,
sourceLine: 999,
},
stacktrace,
});
resolve(parseError);
})
.catch(() => {
resolve(stacktrace);
});
});
}
function getSourceMapContent(sourcemapUrl) {
try {
return (sourcemapCatch[sourcemapUrl] ||
(sourcemapCatch[sourcemapUrl] = new Promise((resolve, reject) => {
try {
if (/^[http|https]+:/i.test(sourcemapUrl)) {
uni.request({
url: sourcemapUrl,
success: (res) => {
sourcemapCatch[sourcemapUrl] = res.data;
resolve(sourcemapCatch[sourcemapUrl]);
},
});
}
else {
sourcemapCatch[sourcemapUrl] = fs.readFileSync(sourcemapUrl, 'utf-8');
resolve(sourcemapCatch[sourcemapUrl]);
}
}
catch (error) {
resolve('');
}
})));
}
catch (error) {
return '';
}
}
function parseSourceMapContent(consumer, obj) {
// source -> 'uni-app:///node_modules/@sentry/browser/esm/helpers.js'
const { source, line: sourceLine, column: sourceColumn, } = consumer.originalPositionFor(obj);
if (source) {
const sourcePathSplit = source.split('/');
const sourcePath = sourcePathSplit.slice(3).join('/');
const fileName = sourcePathSplit.pop();
return {
source,
sourcePath,
sourceLine: sourceLine === null ? 0 : sourceLine,
sourceColumn: sourceColumn === null ? 0 : sourceColumn,
fileName,
};
}
}
function uniStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
return {
parseSourceMapUrl(file, fileName) {
// 组合 sourceMapUrl
if (!base)
return '';
file = (file.match(/(\/.*)/) || [])[1];
if (!file)
return '';
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`;
}
return `${base}/${file}.map`;
},
getSourceMapContent(file, fileName) {
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
},
parseStacktrace(stacktrace) {
return new StackTracey(stacktrace);
},
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
const errorName = stacktrace.split('\n')[0];
return ((errorName.indexOf('at') === -1 ? `${errorName}\n` : '') +
(stack.asTable ? stack.asTable({ maxColumnWidths }) : ''));
},
};
}
function utsStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
let errStack = [];
return {
parseSourceMapUrl(file, fileName) {
// 组合 sourceMapUrl
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`;
}
return `${base}/${file}.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
.map((line, index) => {
line = line.trim();
let callee, fileLineColumn = [], planA, planB;
if ((planA = line.match(/e: (.+\.kt)(.+\))*:\s*(.+)*/))) {
errStack.push('%StacktraceyItem%');
callee = 'e: ';
fileLineColumn = (planA[2].match(/.*:.*\((\d+).+?(\d+)\)/) || []).slice(1);
}
else {
errStack.push(line);
return undefined;
}
const fileName = planA[1]
? (planB = planA[1].match(/(.*)*\/(.+)/) || [])[2] || ''
: '';
return {
beforeParse: line,
callee: callee || '',
index: false,
native: false,
file: nixSlashes(planA[1] || ''),
line: parseInt(fileLineColumn[0] || '', 10) || undefined,
column: parseInt(fileLineColumn[1] || '', 10) || undefined,
fileName,
fileShort: planB ? planB[1] : '',
errMsg: planA[3] || '',
calleeShort: '',
fileRelative: '',
thirdParty: false,
};
})
.filter((x) => x !== undefined);
return {
items: entries,
};
},
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
return errStack
.map((item) => {
if (item === '%StacktraceyItem%') {
const _stack = stack.items.shift();
if (_stack)
return `${_stack.callee}${_stack.file}: (${_stack.line}, ${_stack.column}): ${_stack.errMsg}`;
}
return item;
})
.join('\n');
},
};
// @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) {
const parseStack = [];
const stack = opts.preset.parseStacktrace(stacktrace);
stack.items.forEach((item, index) => {
const fn = () => {
const { line = 0, column = 0, file, fileName } = item;
try {
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;
stack.items[index] = Object.assign({}, item, {
file: source,
line: sourceLine,
column: sourceColumn,
fileShort: sourcePath,
fileRelative: sourcePath,
fileName,
});
}
});
});
}
catch (error) {
return Promise.resolve();
}
};
parseStack.push(fn());
});
return new Promise((resolve, reject) => {
Promise.all(parseStack)
.then(() => {
const parseError = opts.preset.asTableStacktrace({
stack,
maxColumnWidths: {
callee: 999,
file: 999,
sourceLine: 999,
},
stacktrace,
});
resolve(parseError);
})
.catch(() => {
resolve(stacktrace);
});
});
}
function getSourceMapContent(sourcemapUrl) {
try {
return (sourcemapCatch[sourcemapUrl] ||
(sourcemapCatch[sourcemapUrl] = new Promise((resolve, reject) => {
try {
if (/^[http|https]+:/i.test(sourcemapUrl)) {
uni.request({
url: sourcemapUrl,
success: (res) => {
sourcemapCatch[sourcemapUrl] = res.data;
resolve(sourcemapCatch[sourcemapUrl]);
},
});
}
else {
sourcemapCatch[sourcemapUrl] = fs.readFileSync(sourcemapUrl, 'utf-8');
resolve(sourcemapCatch[sourcemapUrl]);
}
}
catch (error) {
resolve('');
}
})));
}
catch (error) {
return '';
}
}
function parseSourceMapContent(consumer, obj) {
// source -> 'uni-app:///node_modules/@sentry/browser/esm/helpers.js'
const { source, line: sourceLine, column: sourceColumn, } = consumer.originalPositionFor(obj);
if (source) {
const sourcePathSplit = source.split('/');
const sourcePath = sourcePathSplit.slice(3).join('/');
const fileName = sourcePathSplit.pop();
return {
source,
sourcePath,
sourceLine: sourceLine === null ? 0 : sourceLine,
sourceColumn: sourceColumn === null ? 0 : sourceColumn,
fileName,
};
}
}
function uniStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
return {
parseSourceMapUrl(file, fileName) {
// 组合 sourceMapUrl
if (!base)
return '';
file = (file.match(/(\/.*)/) || [])[1];
if (!file)
return '';
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`;
}
return `${base}/${file}.map`;
},
getSourceMapContent(file, fileName) {
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
},
parseStacktrace(stacktrace) {
return new StackTracey(stacktrace);
},
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
const errorName = stacktrace.split('\n')[0];
return ((errorName.indexOf('at') === -1 ? `${errorName}\n` : '') +
(stack.asTable ? stack.asTable({ maxColumnWidths }) : ''));
},
};
}
function utsStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
let errStack = [];
return {
parseSourceMapUrl(file, fileName) {
// 组合 sourceMapUrl
if (sourceRoot) {
return `${file.replace(sourceRoot, base + '/')}.map`;
}
return `${base}/${file}.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
.map((line, index) => {
line = line.trim();
let callee, fileLineColumn = [], planA, planB;
if ((planA = line.match(/e: (.+\.kt)(.+\))*:\s*(.+)*/))) {
errStack.push('%StacktraceyItem%');
callee = 'e: ';
fileLineColumn = (planA[2].match(/.*:.*\((\d+).+?(\d+)\)/) || []).slice(1);
}
else {
errStack.push(line);
return undefined;
}
const fileName = planA[1]
? (planB = planA[1].match(/(.*)*\/(.+)/) || [])[2] || ''
: '';
return {
beforeParse: line,
callee: callee || '',
index: false,
native: false,
file: nixSlashes(planA[1] || ''),
line: parseInt(fileLineColumn[0] || '', 10) || undefined,
column: parseInt(fileLineColumn[1] || '', 10) || undefined,
fileName,
fileShort: planB ? planB[1] : '',
errMsg: planA[3] || '',
calleeShort: '',
fileRelative: '',
thirdParty: false,
};
})
.filter((x) => x !== undefined);
return {
items: entries,
};
},
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
return errStack
.map((item) => {
if (item === '%StacktraceyItem%') {
const _stack = stack.items.shift();
if (_stack)
return `${_stack.callee}${_stack.file}: (${_stack.line}, ${_stack.column}): ${_stack.errMsg}`;
}
return item;
})
.join('\n');
},
};
}
export { stacktracey, uniStracktraceyPreset, utsStracktraceyPreset };
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册