import os from 'os'; import QRCode from 'qrcode'; import getMAC from 'getmac'; import path from 'path'; import { promisify } from 'util'; import mkdirp from 'mkdirp'; /** * QR显示在终端 */ export function QRTerminal(text: string): Promise { return new Promise((resolve, reject) => { // const isWindows = os.platform() === 'win32' QRCode.toString( text, { type: 'terminal', version: 10, errorCorrectionLevel: 'L', }, function (err, url) { if (err) { reject(err); return; } resolve(url); } ); }); } /** * base64格式的预览二维码图片 */ export function QRToDataURL(text: string): Promise { return new Promise((resolve, reject) => { QRCode.toDataURL( text, { errorCorrectionLevel: 'Q', // quality: 0.8, }, function (err, url) { if (err) { reject(err); return; } resolve(url); } ); }); } /** * 生成本地图片 */ export async function QRImage(filepath: string, text: string) { const pathRes = path.parse(filepath); if (!pathRes.ext) { throw new Error('保存路径必须指定文件格式,建议使用.png'); } // 文件根目录,windows会报错,比如D:\ if (pathRes.root !== pathRes.dir) { // 优先保证文件目录存在 await mkdirp(pathRes.dir); } await new Promise((resolve, reject) => { QRCode.toFile( filepath, text, { type: 'png', }, function (err) { if (err) { reject(err); return; } resolve(); } ); }); } export function getMACAdress() { try { return getMAC(); } catch (e) { return '00:00:00:00:00:00'; } } export function geClientInfo() { const VERSION = require('../../package.json').version; return { mac: getMACAdress(), terminalVersion: VERSION, terminalType: 'TINY_APP_IDE', os: process.platform === 'darwin' ? 'Mac' : 'Windows', osVersion: os.release(), osArch: process.arch, }; } export function pause(time: number) { return new Promise((resolve) => { setTimeout(resolve, time); }); } /** * 获取缓存存放目录 * ${home}/.alipaydev * /Users/nuge.lw/.alipaydev */ export function cachedir(): string { const cachePath = path.join(os.homedir(), '.alipaydev'); return cachePath; } /** * 获取临时文件夹 */ export async function tmpdir(): Promise { const tmpdir = path.join(os.tmpdir(), 'alipaydev'); await mkdirp(tmpdir); return tmpdir; } export const sleep = promisify(setTimeout); /** * 版本号比较 * @param {string} v1 版本号 * @param {string} operator 操作符,'>', '>=', '<=', '==', '!=' * @param {string} v2 版本号 * @return {boolean} * @example * util.compareVersion('1.3.2', '>', '1.2'); * util.compareVersion('1.3.2', '>=', '1.2'); * util.compareVersion('1.3.2', '==', '1.2'); * util.compareVersion('1.3.2', '!=', '1.2'); */ export function compareVersion(version1: string, operator: string, version2: string): boolean { // TS MODIFY const v1 = version1.split('.'); const v2 = version2.split('.'); const maxLen = Math.max(v1.length, v2.length); let cmp = 0; let item1: number, item2: number; for (let i = 0; i < maxLen && !cmp; i++) { item1 = parseInt(v1[i], 10) || 0; item2 = parseInt(v2[i], 10) || 0; if (item1 < item2) { cmp = 1; } else if (item1 > item2) { cmp = -1; } } switch (operator) { case '>': return cmp === -1; case '>=': return cmp === 0 || cmp == -1; case '<': return cmp === 1; case '<=': return cmp === 0 || cmp == 1; case '==': return cmp === 0; case '!=': return cmp !== 0; } return false; } export function getUploadKeyLink(): string { const host = process.env.OPENHOME_HOST || 'https://openhome.alipay.com'; const link = host + '/dev/workspace/key-manage/tool'; return link; } export function getMBSize(bytes: number) { return (bytes / 1024 / 1024).toFixed(2); }