diff options
| author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2019-05-30 14:59:30 +0200 |
|---|---|---|
| committer | Ryan Dahl <ry@tinyclouds.org> | 2019-05-30 08:59:30 -0400 |
| commit | 50a79584cb12129b3db1ef3e0eb9d0c8b9f20b62 (patch) | |
| tree | ee9a90a8b8018c03b1e1a6ace07abdaa494ea90d /archive | |
| parent | 80b3c486f6222f65b52eb2eca903b67312e8ce0c (diff) | |
chore: Implement strict mode (denoland/deno_std#453)
Original: https://github.com/denoland/deno_std/commit/be24677d15494e83eea2e99bfc5ccfdde31cb892
Diffstat (limited to 'archive')
| -rw-r--r-- | archive/tar.ts | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/archive/tar.ts b/archive/tar.ts index 5ef3aa2a7..c72abc659 100644 --- a/archive/tar.ts +++ b/archive/tar.ts @@ -35,8 +35,10 @@ const ustar = "ustar\u000000"; * Simple file reader */ export class FileReader implements Deno.Reader { - private file: Deno.File; + private file?: Deno.File; + constructor(private filePath: string, private mode: Deno.OpenMode = "r") {} + public async read(p: Uint8Array): Promise<Deno.ReadResult> { if (!this.file) { this.file = await Deno.open(this.filePath, this.mode); @@ -44,7 +46,7 @@ export class FileReader implements Deno.Reader { const res = await Deno.read(this.file.rid, p); if (res.eof) { await Deno.close(this.file.rid); - this.file = null; + this.file = undefined; } return res; } @@ -54,18 +56,21 @@ export class FileReader implements Deno.Reader { * Simple file writer (call FileWriter.dispose() after use) */ export class FileWriter implements Deno.Writer { - private file: Deno.File; + private file?: Deno.File; + constructor(private filePath: string, private mode: Deno.OpenMode = "w") {} + public async write(p: Uint8Array): Promise<number> { if (!this.file) { this.file = await Deno.open(this.filePath, this.mode); } return Deno.write(this.file.rid, p); } + public dispose(): void { if (!this.file) return; Deno.close(this.file.rid); - this.file = null; + this.file = undefined; } } @@ -191,7 +196,7 @@ function formatHeader(data: TarData): Uint8Array { buffer = clean(512); let offset = 0; ustarStructure.forEach(function(value): void { - const entry = encoder.encode(data[value.field] || ""); + const entry = encoder.encode(data[value.field as keyof TarData] || ""); buffer.set(entry, offset); offset += value.length; // space it out with nulls }); @@ -307,12 +312,13 @@ export class Tar { } i--; } - if (i < 0 || fileName.length > 100 || fileNamePrefix.length > 155) { + if (i < 0 || fileName.length > 100 || fileNamePrefix!.length > 155) { throw new Error( "ustar format does not allow a long file name (length of [file name prefix] + / + [file name] must be shorter than 256 bytes)" ); } } + fileNamePrefix = fileNamePrefix!; opts = opts || {}; @@ -344,7 +350,7 @@ export class Tar { fileMode: pad(mode, 7), uid: pad(uid, 7), gid: pad(gid, 7), - fileSize: pad(info ? info.len : opts.contentSize, 11), + fileSize: pad((info ? info.len : opts.contentSize)!, 11), mtime: pad(mtime, 11), checksum: " ", type: "0", // just a file @@ -362,7 +368,7 @@ export class Tar { .filter((key): boolean => ["filePath", "reader"].indexOf(key) < 0) .forEach(function(key): void { checksum += encoder - .encode(tarData[key]) + .encode(tarData[key as keyof TarData]) .reduce((p, c): number => p + c, 0); }); @@ -381,7 +387,7 @@ export class Tar { headerArr = formatHeader(tarData); readers.push(new Deno.Buffer(headerArr)); if (!reader) { - reader = new FileReader(filePath); + reader = new FileReader(filePath!); } readers.push(reader); @@ -390,7 +396,7 @@ export class Tar { new Deno.Buffer( clean( recordSize - - (parseInt(tarData.fileSize, 8) % recordSize || recordSize) + (parseInt(tarData.fileSize!, 8) % recordSize || recordSize) ) ) ); @@ -451,7 +457,7 @@ export class Untar { (key): void => { const arr = trim(header[key]); if (arr.byteLength > 0) { - meta[key] = parseInt(decoder.decode(arr), 8); + meta[key as keyof UntarOptions] = parseInt(decoder.decode(arr), 8); } } ); @@ -459,7 +465,7 @@ export class Untar { (key): void => { const arr = trim(header[key]); if (arr.byteLength > 0) { - meta[key] = decoder.decode(arr); + meta[key as keyof UntarOptions] = decoder.decode(arr); } } ); |
