()
| 216 | } |
| 217 | |
| 218 | async write() { |
| 219 | this.createBuffer(); |
| 220 | const view = new Uint8Array(this.buffer); |
| 221 | let offset = 0; |
| 222 | for (const item of this.fileData) { |
| 223 | // write header |
| 224 | this.writeFileName(item.name, offset); |
| 225 | this.writeFileType(item.type, offset); |
| 226 | this.writeFileSize(item.size, offset); |
| 227 | this.fillHeader( |
| 228 | offset, |
| 229 | item.opts as Partial<ITarWriteOptions>, |
| 230 | item.type, |
| 231 | ); |
| 232 | this.writeChecksum(offset); |
| 233 | |
| 234 | // write data |
| 235 | const data = new Uint8Array((await item.data) as ArrayBuffer); |
| 236 | view.set(data, offset + 512); |
| 237 | offset += 512 + 512 * Math.floor((item.size + 511) / 512); |
| 238 | } |
| 239 | // Required so it works in the browser and node. |
| 240 | if (typeof Blob !== "undefined") { |
| 241 | return new Blob([this.buffer], { type: "application/x-tar" }); |
| 242 | } |
| 243 | return this.buffer; |
| 244 | } |
| 245 | |
| 246 | private writeString(str: string, offset: number, size: number) { |
| 247 | const strView = utf8Encode(str); |
no test coverage detected