UNPKG

hackpro-sdk

Version:
79 lines 3.47 kB
"use strict"; /* * Copyright 2019 balena.io * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const readable_stream_1 = require("readable-stream"); const shared_1 = require("./shared"); class SparseReadStream extends readable_stream_1.Readable { constructor(source, blocks, chunkSize, verify, generateChecksums, options = {}) { super(Object.assign(Object.assign({}, options), { objectMode: true })); this.source = source; this.blocks = blocks; this.chunkSize = chunkSize; this.positionInBlock = 0; this.stateIterator = shared_1.createSparseReaderStateIterator(blocks, verify, generateChecksums); this.nextBlock(); } _read() { return __awaiter(this, void 0, void 0, function* () { try { this.push(yield this.__read()); } catch (error) { this.emit('error', error); this.push(null); } }); } nextBlock() { this.state = this.stateIterator.next().value; this.positionInBlock = 0; } __read() { return __awaiter(this, void 0, void 0, function* () { if (this.state === undefined) { // No current block means we're done reading return null; } const length = Math.min(this.chunkSize, this.state.subBlock.length - this.positionInBlock); const buffer = Buffer.allocUnsafe(length); yield this.source.read(buffer, 0, length, this.state.subBlock.offset + this.positionInBlock); if (this.state.hasher !== undefined) { this.state.hasher.update(buffer); } const chunk = { buffer, position: this.state.subBlock.offset + this.positionInBlock, }; this.positionInBlock += length; if (this.positionInBlock === this.state.subBlock.length) { this.nextBlock(); } return chunk; }); } } exports.SparseReadStream = SparseReadStream; //# sourceMappingURL=sparse-read-stream.js.map