UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

72 lines 6.22 kB
import { chunkArray } from '@iotize/common/array'; import { KaitaiStreamWriter } from '@iotize/common/byte-stream'; import { SinglePacketChunk } from '../generated/models'; import { SinglePacketBuilder } from './single-packet-builder'; import { computePadding } from './util'; /** * Utility class to split a big single packet data into {@link SinglePacketChunk} */ export class SinglePacketSplitter { /** * @throws {@link #chunkSize} < {@link #unitBlockSize} */ constructor(options = {}) { if (!options.sizeMultiplicator) { options.sizeMultiplicator = SinglePacketSplitter.SIZE_MULTIPLICATOR; } if (!options.chunkSize) { options.chunkSize = SinglePacketBuilder.MAX_PART_SIZE; } if (!options.format) { options.format = SinglePacketChunk.Format.OFFSET_ON_2_BYTES; } if (!options.pad) { options.pad = false; } this.options = options; this.checkOptions(); } get sizeMultiplicator() { return this.options.sizeMultiplicator; } checkOptions() { // Maybe we should force chunk size to be a multiple of unitBlockSize ? if (this.options.chunkSize < this.sizeMultiplicator) { throw new Error(`Chunk size must be greater than ${this.sizeMultiplicator}. Given: ${this.options.chunkSize}`); } if (!this.options.pad && this.options.chunkSize % this.sizeMultiplicator !== 0) { throw new Error(`Chunk size "${this.options.chunkSize}" is not a multiple of length multiplicator "${this.sizeMultiplicator}"`); } } /** * @return an array of single packet parts */ chunk(data) { if (!this.options.pad) { if (data.length % this.sizeMultiplicator !== 0) { throw new Error(`Padding is disabled and data length (${data.length} byte(s)) is not a multiple of length multiplicator ${this.sizeMultiplicator})`); } } else { const padding = computePadding(data.length, this.sizeMultiplicator); if (padding > 0) { data = KaitaiStreamWriter.mergeArrays(data, new Uint8Array(padding)); } } const packets = chunkArray(Array.from(data), this.options.chunkSize).map((value) => Uint8Array.from(value)); let offset = 0; return packets.map((chunk) => { const part = { data: chunk, length: Math.ceil(chunk.length / this.sizeMultiplicator), offset: Math.ceil(offset / this.sizeMultiplicator), format: this.options.format, }; offset += chunk.length; return part; }); } } SinglePacketSplitter.SIZE_MULTIPLICATOR = 16; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXBhY2tldC1zcGxpdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NlcnZpY2UvaW1wbC9zaW5nbGUtcGFja2V0L3NyYy9saWIvY3VzdG9tL3NpbmdsZS1wYWNrZXQtc3BsaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUF1QnhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQjs7T0FFRztJQUNILFlBQW1CLFVBQWlELEVBQUU7UUFDcEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUM5QixPQUFPLENBQUMsaUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsa0JBQWtCLENBQUM7U0FDckU7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0QixPQUFPLENBQUMsU0FBUyxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztTQUN2RDtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1NBQzdEO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDaEIsT0FBTyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQXVDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFlB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