refactor(archive): prepare for noUncheckedIndexedAccess (#4110)

* refactor(archive): prepare for noUncheckedIndexedAccess

* adjust test to handle new TarHeader requirements
This commit is contained in:
Simon Holloway 2024-01-08 04:58:59 +00:00 committed by GitHub
parent 3d74dbd2ca
commit efb3866571
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 9 deletions

View File

@ -71,7 +71,7 @@ struct posix_header { // byte offset
};
*/
export const ustarStructure: Array<{ field: string; length: number }> = [
export const ustarStructure = [
{
field: "fileName",
length: 100,
@ -136,7 +136,9 @@ export const ustarStructure: Array<{ field: string; length: number }> = [
field: "padding",
length: 12,
},
];
] as const;
export type UstarFields = (typeof ustarStructure)[number]["field"];
export async function readBlock(
reader: Reader,

View File

@ -34,6 +34,7 @@ import {
HEADER_LENGTH,
readBlock,
type TarMeta,
UstarFields,
ustarStructure,
} from "./_common.ts";
import { readAll } from "../streams/read_all.ts";
@ -47,9 +48,9 @@ export interface TarMetaWithLinkName extends TarMeta {
linkName?: string;
}
export interface TarHeader {
[key: string]: Uint8Array;
}
export type TarHeader = {
[key in UstarFields]: Uint8Array;
};
// https://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06
// eight checksum bytes taken to be ascii spaces (decimal value 32)
@ -69,8 +70,8 @@ function trim(buffer: Uint8Array): Uint8Array {
* Parse file header in a tar archive
* @param length
*/
function parseHeader(buffer: Uint8Array): { [key: string]: Uint8Array } {
const data: { [key: string]: Uint8Array } = {};
function parseHeader(buffer: Uint8Array): TarHeader {
const data = {} as TarHeader;
let offset = 0;
ustarStructure.forEach(function (value) {
const arr = buffer.subarray(offset, offset + value.length);
@ -222,7 +223,7 @@ export class Untar {
// Ignore checksum header
continue;
}
sum += header[i];
sum += header[i]!;
}
return sum;
}

View File

@ -332,7 +332,22 @@ Deno.test({
// Test TarEntry type
const bufSizes = [1, 53, 256, 511];
const header: TarHeader = {
test: new Uint8Array(bufSizes),
fileName: new Uint8Array(bufSizes),
fileMode: new Uint8Array(bufSizes),
uid: new Uint8Array(bufSizes),
gid: new Uint8Array(bufSizes),
fileSize: new Uint8Array(bufSizes),
mtime: new Uint8Array(bufSizes),
checksum: new Uint8Array(bufSizes),
type: new Uint8Array(bufSizes),
linkName: new Uint8Array(bufSizes),
ustar: new Uint8Array(bufSizes),
owner: new Uint8Array(bufSizes),
group: new Uint8Array(bufSizes),
majorNumber: new Uint8Array(bufSizes),
minorNumber: new Uint8Array(bufSizes),
fileNamePrefix: new Uint8Array(bufSizes),
padding: new Uint8Array(bufSizes),
};
const content = new TextEncoder().encode("hello tar world!");
const reader = new Buffer(content);