xo-vmdk-to-vhd
Version:
JS lib reading and writing .vmdk and .ova files
53 lines (52 loc) • 1.44 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.parseVhdToBlocks = parseVhdToBlocks;
var _assert = _interopRequireDefault(require("assert"));
var _parseVhdStream = require("vhd-lib/parseVhdStream.js");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
async function next(iterator, type, skipableType) {
let item;
do {
const cursor = await iterator.next();
_assert.default.strictEqual(cursor.done, false, 'iterator is done');
item = cursor.value;
} while (item.type === skipableType);
_assert.default.strictEqual(item.type, type);
return item;
}
async function* onlyBlocks(iterable, blockSize) {
for await (const item of iterable) {
if (item.type === 'block') {
const {
id,
data
} = item;
yield {
lba: id * blockSize,
block: data
};
}
}
}
async function parseVhdToBlocks(vhdStream) {
const iterator = (0, _parseVhdStream.parseVhdStream)(vhdStream);
const {
footer
} = await next(iterator, 'footer');
const {
header
} = await next(iterator, 'header');
const {
blockCount
} = await next(iterator, 'bat', 'parentLocator');
return {
blockSize: header.blockSize,
blockCount,
diskSize: footer.currentSize,
geometry: footer.diskGeometry,
blocks: onlyBlocks(iterator, header.blockSize)
};
}
//# sourceMappingURL=parseVhdToBlocks.js.map
;