UNPKG

surgio

Version:

Generating rules for Surge, Clash, Quantumult like a PRO

68 lines 2.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatSubscriptionUserInfo = exports.parseSubscriptionNode = exports.parseSubscriptionUserInfo = void 0; const filesize_1 = require("filesize"); const bytes_1 = __importDefault(require("bytes")); const date_fns_1 = require("date-fns"); const parseSubscriptionUserInfo = (str) => { const res = { upload: 0, download: 0, total: 0, expire: 0, }; str.split(';').forEach((item) => { if (!item) { return; } const pair = item.split('='); const key = pair[0].trim(); const value = Number(pair[1].trim()); if (key in res && !Number.isNaN(value)) { res[key] = value; } }); return res; }; exports.parseSubscriptionUserInfo = parseSubscriptionUserInfo; const parseSubscriptionNode = (dataString, expireString) => { // dataString => 剩余流量:57.37% 1.01TB // expireString => 过期时间:2020-04-21 22:27:38 const dataMatch = dataString.match(/剩余流量:(\d{0,2}(\.\d{1,4})?)%\s(.*)$/); const expireMatch = expireString.match(/过期时间:(.*)$/); if (dataMatch && expireMatch) { const percent = Number(dataMatch[1]) / 100; const leftData = bytes_1.default.parse(dataMatch[3]) ?? 0; const total = Number((Number(leftData) / percent).toFixed(0)); const expire = Math.floor(new Date(expireMatch[1]).getTime() / 1000); return { upload: 0, download: total - Number(leftData), total, expire, }; } else { return undefined; } }; exports.parseSubscriptionNode = parseSubscriptionNode; const formatSubscriptionUserInfo = (userInfo) => { return { upload: (0, filesize_1.filesize)(userInfo.upload, { base: 2 }), download: (0, filesize_1.filesize)(userInfo.download, { base: 2 }), used: (0, filesize_1.filesize)(userInfo.upload + userInfo.download, { base: 2 }), left: (0, filesize_1.filesize)(userInfo.total - userInfo.upload - userInfo.download, { base: 2, }), total: (0, filesize_1.filesize)(userInfo.total, { base: 2 }), expire: userInfo.expire ? `${(0, date_fns_1.format)(new Date(userInfo.expire * 1000), 'yyyy-MM-dd')} (${(0, date_fns_1.formatDistanceToNow)(new Date(userInfo.expire * 1000))})` : '无数据', }; }; exports.formatSubscriptionUserInfo = formatSubscriptionUserInfo; //# sourceMappingURL=subscription.js.map