Initial ecommerce standalone package

This commit is contained in:
2026-06-10 14:06:16 +08:00
commit 3d98933e24
241 changed files with 135283 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
/** Summarize a URL for display in tool pages. */
export function summarizeUrl(value: string): string {
try {
const url = new URL(value);
const lastSegment = url.pathname.split("/").filter(Boolean).pop();
return lastSegment ? `${url.host}/.../${lastSegment}` : url.host;
} catch {
return value.length > 72 ? `${value.slice(0, 34)}...${value.slice(-28)}` : value;
}
}
/** Format a byte count to human-readable file size. */
export function formatFileSize(bytes: number): string {
if (!Number.isFinite(bytes) || bytes <= 0) return "0 KB";
if (bytes >= 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(2)} MB`;
return `${(bytes / 1024).toFixed(1)} KB`;
}
/** Read a File as a data URL string via FileReader. */
export function fileToDataUrl(file: File): Promise<string> {
return new Promise<string>((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(String(reader.result || ""));
reader.onerror = () => reject(new Error("读取素材失败"));
reader.readAsDataURL(file);
});
}
/** Return a Promise that resolves after the given milliseconds. */
export function wait(ms: number): Promise<void> {
return new Promise((resolve) => window.setTimeout(resolve, ms));
}