mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Convert runMany and runManySync to use injectManyWithMeta Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup type errors due to new Runnable requirements Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add documentation for verifyRunnablesAreDAG Signed-off-by: Sebastian Malton <sebastian@malton.name> * Simplify convertToWithIdWith Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move all utility functions to separate package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move testing utilities to separate package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move run-many and run-many-sync to separate package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Replace all internal uses of utilities with new packages Signed-off-by: Sebastian Malton <sebastian@malton.name> * Use new @k8slens/run-many package in core Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add dep to open-lens Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup type errors Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup uses of @k8slens/test-utils Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup getGlobalOverride Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move tests to new package too Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix type errors Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup uses of AsyncResult and autoBind Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup remaining import issues Signed-off-by: Sebastian Malton <sebastian@malton.name> * Finial fixups to fix build Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix lint Signed-off-by: Sebastian Malton <sebastian@malton.name> * Revert moving "testUsingFakeTime" to separate package - This fixes tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix integration tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix unit test failing due to spelling fix Signed-off-by: Sebastian Malton <sebastian@malton.name> --------- Signed-off-by: Sebastian Malton <sebastian@malton.name>
70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
// Helper for working with tarball files (.tar, .tgz)
|
|
// Docs: https://github.com/npm/node-tar
|
|
import tar from "tar";
|
|
import path from "path";
|
|
import type { JsonValue } from "type-fest";
|
|
|
|
export type ReadFileFromTarOpts<ParseJson extends boolean> = {
|
|
tarPath: string;
|
|
filePath: string;
|
|
} & (
|
|
ParseJson extends true
|
|
? {
|
|
parseJson: true;
|
|
}
|
|
: {
|
|
parseJson?: false;
|
|
}
|
|
);
|
|
|
|
export function readFileFromTar(opts: ReadFileFromTarOpts<false>): Promise<Buffer>;
|
|
export function readFileFromTar(opts: ReadFileFromTarOpts<true>): Promise<JsonValue>;
|
|
|
|
export function readFileFromTar<ParseJson extends boolean>({ tarPath, filePath, parseJson = false }: ReadFileFromTarOpts<ParseJson>): Promise<JsonValue | Buffer> {
|
|
return new Promise((resolve, reject) => {
|
|
const fileChunks: Buffer[] = [];
|
|
|
|
tar.list({
|
|
file: tarPath,
|
|
filter: entryPath => path.normalize(entryPath) === filePath,
|
|
sync: true,
|
|
onentry(entry) {
|
|
entry.on("data", chunk => {
|
|
fileChunks.push(chunk);
|
|
});
|
|
entry.once("error", err => {
|
|
reject(new Error(`reading file has failed ${entry.path}: ${err}`));
|
|
});
|
|
entry.once("end", () => {
|
|
const data = Buffer.concat(fileChunks);
|
|
const result = parseJson ? JSON.parse(data.toString("utf8")) : data;
|
|
|
|
resolve(result);
|
|
});
|
|
},
|
|
});
|
|
|
|
if (!fileChunks.length) {
|
|
reject(new Error("Not found"));
|
|
}
|
|
});
|
|
}
|
|
|
|
export async function listTarEntries(filePath: string): Promise<string[]> {
|
|
const entries: string[] = [];
|
|
|
|
await tar.list({
|
|
file: filePath,
|
|
onentry: (entry) => {
|
|
entries.push(path.normalize(entry.path));
|
|
},
|
|
});
|
|
|
|
return entries;
|
|
}
|