jamp3
Version:
mp3, id3v1, id3v2 - reader & writer
155 lines • 5.21 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validCharKeyCode = exports.collectFiles = exports.fileRangeToBuffer = exports.neededStoreBytes = exports.removeZeroString = exports.isBit = exports.bitarray2 = exports.unbitarray = exports.bitarray = exports.log2 = exports.unsynchsafe = exports.synchsafe = exports.unflags = exports.flags = exports.isBitSetAt = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
function isBitSetAt(byte, bit) {
return (byte & 1 << bit) !== 0;
}
exports.isBitSetAt = isBitSetAt;
function flags(names, values) {
const result = {};
names.forEach((name, i) => {
result[name] = !!values[i];
});
return result;
}
exports.flags = flags;
function unflags(names, flagsObj) {
return names.map(name => {
return flagsObj && flagsObj[name] ? 1 : 0;
});
}
exports.unflags = unflags;
function synchsafe(input) {
let out;
let mask = 0x7F;
while (mask ^ 0x7FFFFFFF) {
out = input & ~mask;
out = out << 1;
out = out | (input & mask);
mask = ((mask + 1) << 8) - 1;
input = out;
}
if (out === undefined) {
return 0;
}
return out;
}
exports.synchsafe = synchsafe;
function unsynchsafe(input) {
let out = 0, mask = 0x7F000000;
while (mask) {
out = out >> 1;
out = out | (input & mask);
mask = mask >> 8;
}
if (out === undefined) {
return 0;
}
return out;
}
exports.unsynchsafe = unsynchsafe;
function log2(x) {
return Math.log(x) * Math.LOG2E;
}
exports.log2 = log2;
function bitarray(byte) {
return [128, 64, 32, 16, 8, 4, 2, 1].map(offset => (byte & offset) === offset ? 1 : 0);
}
exports.bitarray = bitarray;
function unbitarray(bitsarray) {
let result = 0;
for (let i = 0; i < 8; ++i) {
result = (result * 2) + (bitsarray[i] ? 1 : 0);
}
return result;
}
exports.unbitarray = unbitarray;
function bitarray2(byte) {
const b = [];
for (let i = 0; i < 8; ++i) {
b[7 - i] = (byte >> i) & 1;
}
return b;
}
exports.bitarray2 = bitarray2;
function isBit(field, nr) {
return !!(field & nr);
}
exports.isBit = isBit;
function removeZeroString(s) {
for (let j = 0; j < s.length; j++) {
if (s.charCodeAt(j) === 0) {
s = s.slice(0, j);
break;
}
}
return s;
}
exports.removeZeroString = removeZeroString;
function neededStoreBytes(num, min) {
let result = Math.ceil((Math.floor(log2(num) + 1) + 1) / 8);
result = Math.max(result, min);
return result;
}
exports.neededStoreBytes = neededStoreBytes;
function fileRangeToBuffer(filename, start, end) {
return __awaiter(this, void 0, void 0, function* () {
const chunks = [];
return new Promise((resolve, reject) => {
try {
const readStream = fs_1.default.createReadStream(filename, { start, end });
readStream.on('data', (chunk) => {
chunks.push(chunk);
});
readStream.on('error', e => {
reject(e);
});
readStream.on('close', () => {
resolve(Buffer.concat(chunks));
});
}
catch (e) {
return reject(e);
}
});
});
}
exports.fileRangeToBuffer = fileRangeToBuffer;
function collectFiles(dir, ext, recursive, onFileCB) {
return __awaiter(this, void 0, void 0, function* () {
const files1 = yield fs_extra_1.default.readdir(dir);
for (const f of files1) {
const sub = path_1.default.join(dir, f);
const stat = yield fs_extra_1.default.stat(sub);
if (stat.isDirectory()) {
if (recursive) {
yield collectFiles(sub, ext, recursive, onFileCB);
}
}
else if ((ext.indexOf(path_1.default.extname(f).toLowerCase()) >= 0)) {
yield onFileCB(sub);
}
}
});
}
exports.collectFiles = collectFiles;
function validCharKeyCode(c) {
return ((c >= 48) && (c < 58)) || ((c >= 65) && (c < 91));
}
exports.validCharKeyCode = validCharKeyCode;
//# sourceMappingURL=utils.js.map