| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- const os_1 = __importDefault(require("os"));
- const https_1 = __importDefault(require("https"));
- const crypto_1 = __importDefault(require("crypto"));
- const SERVER_HOST = 'uacer.dcloud.net.cn';
- const SERVER_PATH = '/http/error-report-x';
- const EXCLUDE_ERROR_LIST = [
- 'uni-app-compiler',
- 'Error: ENOENT: no such file or directory',
- ];
- function getMacHash() {
- let mac = '';
- const network = os_1.default.networkInterfaces();
- for (const key in network) {
- const array = network[key];
- for (let i = 0; i < array.length; i++) {
- const item = array[i];
- if (!item.family || (item.mac && item.mac === '00:00:00:00:00:00')) {
- continue;
- }
- if (
- // Node < v18
- typeof item.family === 'string' &&
- (item.family === 'IPv4' || item.family === 'IPv6')) {
- mac = item.mac;
- break;
- }
- else if (
- // Node >= v18
- typeof item.family === 'number' &&
- (item.family === 4 || item.family === 6)) {
- mac = item.mac;
- break;
- }
- }
- }
- return crypto_1.default.createHash('md5').update(mac).digest('hex');
- }
- const CacheList = [];
- function shouldReport(err = '') {
- try {
- const errMsg = err.toString();
- const errorIndex = EXCLUDE_ERROR_LIST.findIndex((item) => errMsg.includes(item));
- if (errorIndex >= 0) {
- return false;
- }
- // 目前简单的上报逻辑为:错误信息中包含@dcloudio包名
- if (errMsg.includes('@dcloudio') &&
- !errMsg.includes('Errors compiling template')) {
- return true;
- }
- }
- catch (e) { }
- return false;
- }
- function report(type, err) {
- if (!shouldReport(err)) {
- return;
- }
- if (typeof err === 'object') {
- try {
- err = err.toString();
- }
- catch (e) { }
- }
- const UNI_INPUT_DIR_REG = new RegExp(process.env.UNI_INPUT_DIR, 'ig');
- const UNI_CLI_CONTEXT_REG = new RegExp(process.env.UNI_CLI_CONTEXT, 'ig');
- err = err.replace(UNI_INPUT_DIR_REG, 'UNI_INPUT_DIR');
- err = err.replace(UNI_CLI_CONTEXT_REG, 'UNI_CLI_CONTEXT');
- const data = JSON.stringify({
- di: getMacHash(),
- np: process.platform,
- nv: process.version,
- cp: process.env.UNI_PLATFORM,
- cv: process.env.UNI_COMPILER_VERSION,
- hx: process.env.UNI_COMPILER_VERSION_TYPE,
- et: type,
- em: err,
- });
- const dataHash = crypto_1.default.createHash('md5').update(data).digest('hex');
- if (CacheList.includes(dataHash)) {
- return;
- }
- CacheList.push(dataHash);
- setTimeout(() => {
- const req = https_1.default.request({
- hostname: SERVER_HOST,
- port: 443,
- path: SERVER_PATH,
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'Content-Length': data.length,
- },
- });
- req.write(data);
- req.end();
- }, 10);
- }
- // @ts-ignore
- global.__error_reporting__ = report;
- process
- .on('unhandledRejection', (reason, p) => {
- // @ts-ignore
- global.__error_reporting__('unhandledRejection', reason);
- console.log(reason);
- })
- .on('uncaughtException', (err) => {
- // @ts-ignore
- global.__error_reporting__('uncaughtException', err.stack);
- console.log(err);
- });
|