First upload version 0.0.1

This commit is contained in:
Neyra
2026-02-05 15:27:49 +08:00
commit 8e9b7201ed
4182 changed files with 593136 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
export declare const TRUNCATE_TEXT_MAX_LENGTH = 30;
export declare function truncateText(text: string, maxLength?: number): string;
export declare function centerPad(text: string, length: number): string;

View File

@@ -0,0 +1,18 @@
export const TRUNCATE_TEXT_MAX_LENGTH = 30;
export function truncateText(text, maxLength = TRUNCATE_TEXT_MAX_LENGTH) {
if (text.length <= maxLength) {
return text;
}
const ellipsis = "...";
const charsToShow = maxLength - ellipsis.length;
const firstPartChars = Math.ceil(charsToShow / 2);
const secondPartChars = Math.floor(charsToShow / 2);
return text.substring(0, firstPartChars) + ellipsis + text.substring(text.length - secondPartChars);
}
export function centerPad(text, length) {
const padLength = Math.max(0, length - text.length);
const leftPad = Math.floor(padLength / 2);
const rightPad = Math.ceil(padLength / 2);
return " ".repeat(leftPad) + text + " ".repeat(rightPad);
}
//# sourceMappingURL=cli-text.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"cli-text.js","sourceRoot":"","sources":["../../../../src/download/transfer-visualize/utils/cli-text.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,SAAS,GAAG,wBAAwB;IAC3E,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC;IACvB,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAEpD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;AACxG,CAAC;AAGD,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,MAAc;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC1C,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC"}

View File

@@ -0,0 +1,23 @@
export type DataPart = {
type: "status" | "name" | "nameComment" | "progressBar" | "percentage" | "transferred" | "speed" | "timeLeft" | "spacer" | "description";
fullText: string;
size: number;
addEndPadding?: number;
flex?: number;
maxSize?: number;
cropper?: (text: string, size: number) => string;
formatter?(text: string, size: number): string;
};
export type DataLine = DataPart[];
export declare function renderDataLine(dataLine: DataLine, lineLength?: number): string;
export declare function renderDataPart(dataPart: DataPart): string;
export declare function resizeDataLine(dataLine: DataLine, lineLength: number): {
type: "status" | "name" | "nameComment" | "progressBar" | "percentage" | "transferred" | "speed" | "timeLeft" | "spacer" | "description";
fullText: string;
size: number;
addEndPadding?: number;
flex?: number;
maxSize?: number;
cropper?: (text: string, size: number) => string;
formatter?(text: string, size: number): string;
}[];

View File

@@ -0,0 +1,68 @@
export function renderDataLine(dataLine, lineLength = process.stdout.columns - 1) {
return resizeDataLine(dataLine, lineLength)
.map(renderDataPart)
.join("");
}
export function renderDataPart(dataPart) {
let text = dataPart.fullText;
if (dataPart.cropper != null) {
text = dataPart
.cropper(text, dataPart.size)
.slice(0, dataPart.size)
.padEnd(dataPart.size);
}
else {
text = text
.slice(0, dataPart.size)
.padEnd(dataPart.size);
}
if (dataPart.formatter != null) {
text = dataPart.formatter(text, dataPart.size);
}
return text;
}
// only enlarges parts, doesn't shrink them at the moment
export function resizeDataLine(dataLine, lineLength) {
const res = dataLine.map((part) => ({ ...part }));
const currentSize = dataLine.reduce((acc, part) => acc + part.size, 0);
let sizeLeft = lineLength - currentSize;
if (sizeLeft <= 0)
return res;
for (let i = 0; i < res.length && sizeLeft > 0; i++) {
const part = res[i];
if (part.addEndPadding != null) {
const add = Math.min(part.addEndPadding, sizeLeft);
part.size += add;
sizeLeft -= add;
part.addEndPadding -= add;
if (part.addEndPadding === 0)
delete part.addEndPadding;
}
}
while (sizeLeft > 0) {
const flexBoxCandidates = [];
let totalFlexbox = 0;
for (let i = 0; i < res.length; i++) {
const part = res[i];
if (part.flex == null)
continue;
if (part.maxSize != null && part.size >= part.maxSize)
continue;
flexBoxCandidates.push(part);
totalFlexbox += part.flex;
}
flexBoxCandidates.sort((a, b) => a.flex - b.flex);
if (flexBoxCandidates.length === 0)
break;
const sizeLeftSnapshot = sizeLeft;
for (const part of flexBoxCandidates) {
let partSize = Math.ceil(sizeLeftSnapshot * (part.flex / totalFlexbox));
if (part.maxSize != null && partSize + part.size > part.maxSize)
partSize = part.maxSize - part.size;
part.size += partSize;
sizeLeft -= partSize;
}
}
return res;
}
//# sourceMappingURL=data-line.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"data-line.js","sourceRoot":"","sources":["../../../../src/download/transfer-visualize/utils/data-line.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1 @@
export declare function clamp(value: number, min?: number, max?: number): number;

View File

@@ -0,0 +1,4 @@
export function clamp(value, min = 0, max = Number.MAX_VALUE) {
return Math.min(Math.max(value, min), max);
}
//# sourceMappingURL=numbers.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../../../src/download/transfer-visualize/utils/numbers.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,SAAS;IAChE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC"}

View File

@@ -0,0 +1,6 @@
export declare const STATUS_ICONS: {
activeDownload: string;
done: string;
failed: string;
pending: string;
};

View File

@@ -0,0 +1,16 @@
import isUnicodeSupported from "is-unicode-supported";
import chalk from "chalk";
export const STATUS_ICONS = isUnicodeSupported()
? {
activeDownload: chalk.blue("⏵"),
done: chalk.green("✔"),
failed: chalk.red("✖"),
pending: chalk.yellow("\u25f7")
}
: {
activeDownload: chalk.blue.bold(">"),
done: chalk.green("√"),
failed: chalk.red("×"),
pending: chalk.yellow.bold("-")
};
//# sourceMappingURL=progressBarIcons.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"progressBarIcons.js","sourceRoot":"","sources":["../../../../src/download/transfer-visualize/utils/progressBarIcons.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,EAAE;IAC5C,CAAC,CAAC;QACE,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QACtB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QACtB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;KAClC;IACD,CAAC,CAAC;QACE,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACpC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QACtB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QACtB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;KAClC,CAAC"}