fy-convertor
Version:
Convert excel/xml/json/bin/protocl/ts/as ...
129 lines • 3.4 kB
JavaScript
import crypto from 'crypto';
import fs from 'fs-extra';
import path from 'path';
import chardet from 'chardet';
import iconv from 'iconv-lite';
export function gb2byte(gb) {
return gb * 1024 * 1024 * 1024;
}
export function getValues(o, keys) {
if (keys.length == 0)
return [o];
const out = [];
const key = keys[0];
let so = o[key];
if (keys.length == 1) {
if (so instanceof Array) {
out.push(...so);
}
else {
out.push(so);
}
}
else {
const leftKeys = keys.slice(1);
if (so instanceof Array) {
for (const sov of so) {
out.push(...getValues(sov, leftKeys));
}
}
else {
out.push(...getValues(so, leftKeys));
}
}
return out;
}
export function joinValues(o, keys) {
const values = [];
for (const key of keys) {
values.push(o[key]);
}
return values.join('_');
}
export function makeComments(comments) {
if (comments.length == 1) {
return `/**${comments[0]}*/`;
}
let c = '/**\n';
for (const s of comments) {
c += ` * ${s}\n`;
}
c += '*/';
return c;
}
export function findFiles(root, exts, mode) {
let out = [];
if (exts) {
for (let i = 0, len = exts.length; i < len; i++) {
exts[i] = exts[i].toLowerCase();
}
}
findFilesInternal(root, exts, mode, out);
return out;
}
function findFilesInternal(root, exts, mode, out) {
const files = fs.readdirSync(root);
for (let f of files) {
let file = path.join(root, f);
if (fs.statSync(file).isDirectory()) {
findFilesInternal(file, exts, mode, out);
}
else if (!exts || (mode == '+') == exts.includes(path.extname(f).toLowerCase())) {
out.push(file);
}
}
}
export function readGB2312(file) {
let content = fs.readFileSync(file);
return iconv.decode(content, 'gbk');
}
export async function readXml(file) {
const content = await fs.readFile(file);
const encoding = chardet.detect(content);
if (encoding == 'UTF-8') {
return await fs.readFile(file, 'utf-8');
}
return iconv.decode(content, 'gbk');
}
export function md5(str) {
const md5 = crypto.createHash('md5');
md5.update(str);
str = md5.digest('hex');
return str;
}
export function rsubstr(str, from, length) {
let slen = str.length;
let r = slen - from;
let l = -1;
if (length) {
l = r - length;
}
if (l < 0) {
l = 0;
}
return str.substring(l, r);
}
export function writeUTF8withBom(file, content) {
fs.writeFileSync(file, '\ufeff' + content, 'utf-8');
}
export function indent(s, blanks = ' ', startLine = 0) {
let lines = s.split(/\r?\n/);
for (let i = startLine, len = lines.length; i < len; i++) {
let l = lines[i];
if (l) {
lines[i] = blanks + l;
}
}
return lines.join('\n');
}
export function count(s, subs) {
let count = 0;
let idx = s.indexOf(subs);
while (idx >= 0) {
count++;
s = s.substring(idx + subs.length);
idx = s.indexOf(subs);
}
return count;
}
//# sourceMappingURL=vendor.js.map