mirror of
https://github.com/glitternetwork/pinme.git
synced 2026-08-30 17:58:49 +08:00
feat: version 1.1.3 split package
This commit is contained in:
+2
-1
@@ -2,4 +2,5 @@ node_modules
|
||||
/dist
|
||||
.DS_Store
|
||||
.env
|
||||
/test
|
||||
/test
|
||||
/temp
|
||||
+5
-2
@@ -2,7 +2,7 @@ import path from 'path';
|
||||
import chalk from 'chalk';
|
||||
import inquirer from 'inquirer';
|
||||
import figlet from 'figlet';
|
||||
import upload from './utils/uploadToIpfs';
|
||||
import upload from './utils/uploadToIpfsSplit';
|
||||
import fs from 'fs';
|
||||
import CryptoJS from 'crypto-js';
|
||||
|
||||
@@ -84,11 +84,12 @@ export default async (options?: UploadOptions): Promise<void> => {
|
||||
);
|
||||
console.log(chalk.cyan(`URL:`));
|
||||
console.log(chalk.cyan(`${URL}${encryptedCID}`));
|
||||
console.log(chalk.green('\n🎉 upload successful, program exit'));
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error(chalk.red(`Error: ${error.message}`));
|
||||
}
|
||||
return;
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
const answer = await inquirer.prompt([
|
||||
@@ -120,10 +121,12 @@ export default async (options?: UploadOptions): Promise<void> => {
|
||||
);
|
||||
console.log(chalk.cyan(`URL:`));
|
||||
console.log(chalk.cyan(`${URL}${encryptedCID}`));
|
||||
console.log(chalk.green('\n🎉 upload successful, program exit'));
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error(chalk.red(`Error: ${error.message}`));
|
||||
}
|
||||
process.exit(0);
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error(chalk.red(`error executing: ${error.message}`));
|
||||
|
||||
@@ -30,7 +30,7 @@ interface UploadData {
|
||||
path: string;
|
||||
filename?: string;
|
||||
contentHash: string;
|
||||
previewHash: string | null;
|
||||
previewHash?: string | null;
|
||||
size: number;
|
||||
fileCount?: number;
|
||||
isDirectory?: boolean;
|
||||
|
||||
@@ -0,0 +1,658 @@
|
||||
import axios from 'axios';
|
||||
import fs from 'fs-extra';
|
||||
import path from 'path';
|
||||
import FormData from 'form-data';
|
||||
import ora from 'ora';
|
||||
import * as crypto from 'crypto';
|
||||
import {
|
||||
checkFileSizeLimit,
|
||||
checkDirectorySizeLimit,
|
||||
formatSize,
|
||||
} from './uploadLimits';
|
||||
import { saveUploadHistory } from './history';
|
||||
import { getDeviceId } from './getDeviceId';
|
||||
|
||||
// Configuration constants
|
||||
const IPFS_API_URL = process.env.IPFS_API_URL || 'https://ipfs.glitterprotocol.dev/api/v2';
|
||||
const MAX_RETRIES = parseInt(process.env.MAX_RETRIES || '2');
|
||||
const RETRY_DELAY = parseInt(process.env.RETRY_DELAY_MS || '1000');
|
||||
const TIMEOUT = parseInt(process.env.TIMEOUT_MS || '600000');
|
||||
const MAX_POLL_TIME = parseInt(process.env.MAX_POLL_TIME_MINUTES || '5') * 60 * 1000;
|
||||
const POLL_INTERVAL = parseInt(process.env.POLL_INTERVAL_SECONDS || '2') * 1000;
|
||||
const PROGRESS_UPDATE_INTERVAL = 200; // ms
|
||||
const EXPECTED_UPLOAD_TIME = 60000; // 60 seconds
|
||||
const MAX_PROGRESS = 0.95; // 95%
|
||||
|
||||
// Type definitions
|
||||
interface ChunkSessionResponse {
|
||||
code: number;
|
||||
msg: string;
|
||||
data: {
|
||||
session_id: string;
|
||||
total_chunks: number;
|
||||
chunk_size: number;
|
||||
};
|
||||
}
|
||||
|
||||
interface ChunkUploadResponse {
|
||||
code: number;
|
||||
msg: string;
|
||||
data: {
|
||||
chunk_index: number;
|
||||
chunk_size: number;
|
||||
};
|
||||
}
|
||||
|
||||
interface ChunkCompleteResponse {
|
||||
code: number;
|
||||
msg: string;
|
||||
data: {
|
||||
trace_id: string;
|
||||
};
|
||||
}
|
||||
|
||||
interface ChunkStatusResponse {
|
||||
code: number;
|
||||
msg: string;
|
||||
data: {
|
||||
is_ready: boolean;
|
||||
upload_rst: {
|
||||
Bytes: number;
|
||||
Name: string;
|
||||
Size: number;
|
||||
Hash?: string;
|
||||
ShortUrl?: string;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
interface UploadResult {
|
||||
hash: string;
|
||||
shortUrl?: string;
|
||||
}
|
||||
|
||||
// Enhanced progress bar with better UX
|
||||
class StepProgressBar {
|
||||
private readonly spinner: ora.Ora;
|
||||
private readonly fileName: string;
|
||||
private readonly startTime: number;
|
||||
private currentStep: number = 0;
|
||||
private stepStartTime: number = 0;
|
||||
private progressInterval: NodeJS.Timeout | null = null;
|
||||
|
||||
constructor(fileName: string, isDirectory: boolean = false) {
|
||||
this.fileName = fileName;
|
||||
this.spinner = ora(`Preparing to upload ${fileName}...`).start();
|
||||
this.startTime = Date.now();
|
||||
this.stepStartTime = Date.now();
|
||||
|
||||
this.startProgress();
|
||||
}
|
||||
|
||||
startStep(stepIndex: number, stepName?: string): void {
|
||||
this.currentStep = stepIndex;
|
||||
this.stepStartTime = Date.now();
|
||||
}
|
||||
|
||||
updateProgress(progress: number, total: number): void {
|
||||
// Chunk progress update handled by auto progress
|
||||
}
|
||||
|
||||
completeStep(): void {
|
||||
// Step completed, let auto progress continue
|
||||
}
|
||||
|
||||
failStep(error: string): void {
|
||||
this.stopProgress();
|
||||
this.spinner.fail(`Upload failed: ${error}`);
|
||||
}
|
||||
|
||||
complete(): void {
|
||||
this.stopProgress();
|
||||
const totalTime = Math.floor((Date.now() - this.startTime) / 1000);
|
||||
const progressBar = this.createProgressBar(1);
|
||||
this.spinner.succeed(`Upload completed ${progressBar} 100% (${totalTime}s)`);
|
||||
}
|
||||
|
||||
fail(error: string): void {
|
||||
this.stopProgress();
|
||||
const totalTime = Math.floor((Date.now() - this.startTime) / 1000);
|
||||
this.spinner.fail(`Upload failed: ${error} (${totalTime}s)`);
|
||||
}
|
||||
|
||||
private startProgress(): void {
|
||||
this.progressInterval = setInterval(() => {
|
||||
const elapsed = Date.now() - this.startTime;
|
||||
const progress = this.calculateProgress(elapsed);
|
||||
const duration = this.formatDuration(Math.floor(elapsed / 1000));
|
||||
|
||||
const progressBar = this.createProgressBar(progress);
|
||||
this.spinner.text = `Uploading ${this.fileName}... ${progressBar} ${Math.round(progress * 100)}% (${duration})`;
|
||||
}, PROGRESS_UPDATE_INTERVAL);
|
||||
}
|
||||
|
||||
private stopProgress(): void {
|
||||
if (this.progressInterval) {
|
||||
clearInterval(this.progressInterval);
|
||||
this.progressInterval = null;
|
||||
}
|
||||
}
|
||||
|
||||
private calculateProgress(elapsed: number): number {
|
||||
return Math.min((elapsed / EXPECTED_UPLOAD_TIME) * MAX_PROGRESS, MAX_PROGRESS);
|
||||
}
|
||||
|
||||
private createProgressBar(progress: number, width: number = 20): string {
|
||||
const percentage = Math.min(progress, 1);
|
||||
const filledWidth = Math.round(width * percentage);
|
||||
const emptyWidth = width - filledWidth;
|
||||
|
||||
return `[${'█'.repeat(filledWidth)}${'░'.repeat(emptyWidth)}]`;
|
||||
}
|
||||
|
||||
private formatDuration(seconds: number): string {
|
||||
if (seconds < 60) {
|
||||
return `${seconds}s`;
|
||||
} else if (seconds < 3600) {
|
||||
const minutes = Math.floor(seconds / 60);
|
||||
const remainingSeconds = seconds % 60;
|
||||
return `${minutes}m ${remainingSeconds}s`;
|
||||
} else {
|
||||
const hours = Math.floor(seconds / 3600);
|
||||
const minutes = Math.floor((seconds % 3600) / 60);
|
||||
const remainingSeconds = seconds % 60;
|
||||
return `${hours}h ${minutes}m ${remainingSeconds}s`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Utility functions
|
||||
async function calculateMD5(filePath: string): Promise<string> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const hash = crypto.createHash('md5');
|
||||
const stream = fs.createReadStream(filePath);
|
||||
|
||||
stream.on('data', hash.update.bind(hash));
|
||||
stream.on('end', () => resolve(hash.digest('hex')));
|
||||
stream.on('error', reject);
|
||||
});
|
||||
}
|
||||
|
||||
async function compressDirectory(sourcePath: string): Promise<string> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const tempDir = path.join(process.cwd(), 'temp');
|
||||
if (!fs.existsSync(tempDir)) {
|
||||
fs.mkdirSync(tempDir, { recursive: true });
|
||||
}
|
||||
|
||||
const outputPath = path.join(
|
||||
tempDir,
|
||||
`${path.basename(sourcePath)}_${Date.now()}.zip`,
|
||||
);
|
||||
const output = fs.createWriteStream(outputPath);
|
||||
|
||||
const zlib = require('zlib');
|
||||
const gzip = zlib.createGzip({ level: 9 });
|
||||
|
||||
output.on('close', () => resolve(outputPath));
|
||||
gzip.on('error', reject);
|
||||
gzip.pipe(output);
|
||||
|
||||
const stats = fs.statSync(sourcePath);
|
||||
if (stats.isDirectory()) {
|
||||
const archive = require('archiver');
|
||||
const archiveStream = archive('zip', { zlib: { level: 9 } });
|
||||
|
||||
archiveStream.on('error', reject);
|
||||
archiveStream.pipe(output);
|
||||
archiveStream.directory(sourcePath, false);
|
||||
archiveStream.finalize();
|
||||
} else {
|
||||
const fileStream = fs.createReadStream(sourcePath);
|
||||
fileStream.pipe(gzip);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// API functions with better error handling
|
||||
async function initChunkSession(
|
||||
filePath: string,
|
||||
deviceId: string,
|
||||
isDirectory: boolean = false,
|
||||
): Promise<ChunkSessionResponse['data']> {
|
||||
const stats = fs.statSync(filePath);
|
||||
const fileName = path.basename(filePath);
|
||||
const fileSize = stats.size;
|
||||
const md5 = await calculateMD5(filePath);
|
||||
|
||||
try {
|
||||
const response = await axios.post<ChunkSessionResponse>(
|
||||
`${IPFS_API_URL}/chunk/init`,
|
||||
{
|
||||
file_name: fileName,
|
||||
file_size: fileSize,
|
||||
md5: md5,
|
||||
is_directory: isDirectory,
|
||||
uid: deviceId,
|
||||
},
|
||||
{
|
||||
timeout: TIMEOUT,
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
},
|
||||
);
|
||||
|
||||
const { code, msg, data } = response.data;
|
||||
if (code === 200 && data) {
|
||||
return data;
|
||||
}
|
||||
throw new Error(`Session initialization failed: ${msg} (code: ${code})`);
|
||||
} catch (error) {
|
||||
if (axios.isAxiosError(error)) {
|
||||
throw new Error(`Network error: ${error.message}`);
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async function uploadChunkWithAbort(
|
||||
sessionId: string,
|
||||
chunkIndex: number,
|
||||
chunkData: Buffer,
|
||||
deviceId: string,
|
||||
signal: AbortSignal,
|
||||
retryCount: number = 0,
|
||||
): Promise<ChunkUploadResponse['data']> {
|
||||
try {
|
||||
if (signal.aborted) {
|
||||
throw new Error('Request cancelled');
|
||||
}
|
||||
|
||||
const form = new FormData();
|
||||
form.append('session_id', sessionId);
|
||||
form.append('chunk_index', chunkIndex.toString());
|
||||
form.append('uid', deviceId);
|
||||
form.append('chunk', chunkData, {
|
||||
filename: `chunk_${chunkIndex}`,
|
||||
contentType: 'application/octet-stream',
|
||||
});
|
||||
|
||||
const response = await axios.post<ChunkUploadResponse>(
|
||||
`${IPFS_API_URL}/chunk/upload`,
|
||||
form,
|
||||
{
|
||||
headers: { ...form.getHeaders() },
|
||||
timeout: TIMEOUT,
|
||||
signal,
|
||||
},
|
||||
);
|
||||
|
||||
const { code, msg, data } = response.data;
|
||||
if (code === 200 && data) {
|
||||
return data;
|
||||
}
|
||||
throw new Error(`Chunk upload failed: ${msg} (code: ${code})`);
|
||||
} catch (error: any) {
|
||||
if (error.name === 'CanceledError' || signal.aborted) {
|
||||
throw new Error('Request cancelled');
|
||||
}
|
||||
|
||||
if (retryCount < MAX_RETRIES) {
|
||||
await delayWithAbortCheck(RETRY_DELAY, signal);
|
||||
return uploadChunkWithAbort(
|
||||
sessionId,
|
||||
chunkIndex,
|
||||
chunkData,
|
||||
deviceId,
|
||||
signal,
|
||||
retryCount + 1,
|
||||
);
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
`Chunk ${chunkIndex + 1} upload failed after ${MAX_RETRIES} retries: ${error.message}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function delayWithAbortCheck(delay: number, signal: AbortSignal): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
const timeoutId = setTimeout(() => {
|
||||
if (signal.aborted) {
|
||||
reject(new Error('Request cancelled'));
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
}, delay);
|
||||
|
||||
if (signal.aborted) {
|
||||
clearTimeout(timeoutId);
|
||||
reject(new Error('Request cancelled'));
|
||||
return;
|
||||
}
|
||||
|
||||
const checkInterval = setInterval(() => {
|
||||
if (signal.aborted) {
|
||||
clearTimeout(timeoutId);
|
||||
clearInterval(checkInterval);
|
||||
reject(new Error('Request cancelled'));
|
||||
}
|
||||
}, 50);
|
||||
});
|
||||
}
|
||||
|
||||
async function uploadFileChunks(
|
||||
filePath: string,
|
||||
sessionId: string,
|
||||
totalChunks: number,
|
||||
chunkSize: number,
|
||||
deviceId: string,
|
||||
progressBar: StepProgressBar,
|
||||
): Promise<void> {
|
||||
const fileData = fs.readFileSync(filePath);
|
||||
const abortController = new AbortController();
|
||||
let completedCount = 0;
|
||||
let hasFatalError = false;
|
||||
let fatalError: string | null = null;
|
||||
|
||||
const uploadTasks = Array.from({ length: totalChunks }, (_, chunkIndex) => {
|
||||
const start = chunkIndex * chunkSize;
|
||||
const end = Math.min(start + chunkSize, fileData.length);
|
||||
const chunkData = fileData.slice(start, end);
|
||||
|
||||
return async () => {
|
||||
if (abortController.signal.aborted) return;
|
||||
|
||||
try {
|
||||
await uploadChunkWithAbort(
|
||||
sessionId,
|
||||
chunkIndex,
|
||||
chunkData,
|
||||
deviceId,
|
||||
abortController.signal
|
||||
);
|
||||
|
||||
if (abortController.signal.aborted) return;
|
||||
|
||||
completedCount++;
|
||||
progressBar.updateProgress(completedCount, totalChunks);
|
||||
} catch (error: any) {
|
||||
if (error.name === 'AbortError' || abortController.signal.aborted) {
|
||||
return;
|
||||
}
|
||||
|
||||
hasFatalError = true;
|
||||
fatalError = `Chunk ${chunkIndex + 1}/${totalChunks} upload failed: ${error.message}`;
|
||||
abortController.abort();
|
||||
throw new Error(fatalError);
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
try {
|
||||
const results = await Promise.allSettled(uploadTasks.map(task => task()));
|
||||
const failedResults = results.filter(result => result.status === 'rejected');
|
||||
|
||||
if (failedResults.length > 0) {
|
||||
const firstFailure = failedResults[0] as PromiseRejectedResult;
|
||||
throw new Error(firstFailure.reason.message || 'Error occurred during upload');
|
||||
}
|
||||
|
||||
if (hasFatalError) {
|
||||
throw new Error(fatalError || 'Unknown error occurred during upload');
|
||||
}
|
||||
} catch (error: any) {
|
||||
throw fatalError ? new Error(fatalError) : error;
|
||||
}
|
||||
}
|
||||
|
||||
async function completeChunkUpload(
|
||||
sessionId: string,
|
||||
deviceId: string,
|
||||
): Promise<string> {
|
||||
try {
|
||||
const response = await axios.post<ChunkCompleteResponse>(
|
||||
`${IPFS_API_URL}/chunk/complete`,
|
||||
{ session_id: sessionId, uid: deviceId },
|
||||
{
|
||||
timeout: TIMEOUT,
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
},
|
||||
);
|
||||
|
||||
const { code, msg, data } = response.data;
|
||||
if (code === 200 && data) {
|
||||
return data.trace_id;
|
||||
}
|
||||
throw new Error(`Complete upload failed: ${msg} (code: ${code})`);
|
||||
} catch (error) {
|
||||
if (axios.isAxiosError(error)) {
|
||||
throw new Error(`Network error: ${error.message}`);
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async function getChunkStatus(
|
||||
sessionId: string,
|
||||
deviceId: string,
|
||||
): Promise<ChunkStatusResponse['data']> {
|
||||
try {
|
||||
const response = await axios.get<ChunkStatusResponse>(
|
||||
`${IPFS_API_URL}/up_status`,
|
||||
{
|
||||
params: { trace_id: sessionId, uid: deviceId },
|
||||
timeout: TIMEOUT,
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
},
|
||||
);
|
||||
|
||||
const { code, msg, data } = response.data;
|
||||
if (code === 200) {
|
||||
return data;
|
||||
}
|
||||
throw new Error(`Server returned error: ${msg} (code: ${code})`);
|
||||
} catch (error) {
|
||||
if (axios.isAxiosError(error)) {
|
||||
throw new Error(`Network error: ${error.message}`);
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async function monitorChunkProgress(
|
||||
traceId: string,
|
||||
deviceId: string,
|
||||
): Promise<UploadResult | null> {
|
||||
let consecutiveErrors = 0;
|
||||
const startTime = Date.now();
|
||||
|
||||
while (Date.now() - startTime < MAX_POLL_TIME) {
|
||||
try {
|
||||
const status = await getChunkStatus(traceId, deviceId);
|
||||
consecutiveErrors = 0;
|
||||
|
||||
if (status.is_ready && status.upload_rst.Hash) {
|
||||
return {
|
||||
hash: status.upload_rst.Hash,
|
||||
shortUrl: status.upload_rst.ShortUrl,
|
||||
};
|
||||
}
|
||||
} catch (error: any) {
|
||||
consecutiveErrors++;
|
||||
if (consecutiveErrors > 10) {
|
||||
throw new Error(`Polling failed: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL));
|
||||
}
|
||||
|
||||
const maxPollTimeMinutes = Math.floor(MAX_POLL_TIME / (60 * 1000));
|
||||
throw new Error(`Polling timeout after ${maxPollTimeMinutes} minutes`);
|
||||
}
|
||||
|
||||
// Main upload functions
|
||||
async function uploadDirectoryInChunks(
|
||||
directoryPath: string,
|
||||
deviceId: string,
|
||||
): Promise<UploadResult | null> {
|
||||
const sizeCheck = checkDirectorySizeLimit(directoryPath);
|
||||
if (sizeCheck.exceeds) {
|
||||
throw new Error(
|
||||
`Directory ${directoryPath} exceeds size limit ${formatSize(sizeCheck.limit)} (size: ${formatSize(sizeCheck.size)})`,
|
||||
);
|
||||
}
|
||||
|
||||
const progressBar = new StepProgressBar(path.basename(directoryPath), true);
|
||||
|
||||
try {
|
||||
progressBar.startStep(0, 'Preparing compression');
|
||||
const compressedPath = await compressDirectory(directoryPath);
|
||||
progressBar.completeStep();
|
||||
|
||||
progressBar.startStep(1, 'Initializing session');
|
||||
const sessionInfo = await initChunkSession(compressedPath, deviceId, true);
|
||||
progressBar.completeStep();
|
||||
|
||||
progressBar.startStep(2, 'Chunk upload');
|
||||
await uploadFileChunks(
|
||||
compressedPath,
|
||||
sessionInfo.session_id,
|
||||
sessionInfo.total_chunks,
|
||||
sessionInfo.chunk_size,
|
||||
deviceId,
|
||||
progressBar,
|
||||
);
|
||||
progressBar.completeStep();
|
||||
|
||||
progressBar.startStep(3, 'Completing upload');
|
||||
const traceId = await completeChunkUpload(sessionInfo.session_id, deviceId);
|
||||
progressBar.completeStep();
|
||||
|
||||
progressBar.startStep(4, 'Waiting for processing');
|
||||
const result = await monitorChunkProgress(traceId, deviceId);
|
||||
progressBar.completeStep();
|
||||
|
||||
// Cleanup
|
||||
try {
|
||||
fs.unlinkSync(compressedPath);
|
||||
} catch (error) {
|
||||
// Ignore cleanup errors
|
||||
}
|
||||
|
||||
// Save history
|
||||
const uploadData = {
|
||||
path: directoryPath,
|
||||
filename: path.basename(directoryPath),
|
||||
contentHash: result?.hash || 'unknown',
|
||||
size: sizeCheck.size,
|
||||
fileCount: 0,
|
||||
isDirectory: true,
|
||||
shortUrl: result?.shortUrl || null,
|
||||
};
|
||||
saveUploadHistory(uploadData);
|
||||
|
||||
if (!result?.hash) {
|
||||
throw new Error('Server did not return valid hash value');
|
||||
}
|
||||
|
||||
progressBar.complete();
|
||||
return result;
|
||||
} catch (error: any) {
|
||||
progressBar.fail(error.message);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async function uploadFileInChunks(
|
||||
filePath: string,
|
||||
deviceId: string,
|
||||
): Promise<UploadResult | null> {
|
||||
const sizeCheck = checkFileSizeLimit(filePath);
|
||||
if (sizeCheck.exceeds) {
|
||||
throw new Error(
|
||||
`File ${filePath} exceeds size limit ${formatSize(sizeCheck.limit)} (size: ${formatSize(sizeCheck.size)})`,
|
||||
);
|
||||
}
|
||||
|
||||
const fileName = path.basename(filePath);
|
||||
const progressBar = new StepProgressBar(fileName, false);
|
||||
|
||||
try {
|
||||
progressBar.startStep(0, 'Initializing session');
|
||||
const sessionInfo = await initChunkSession(filePath, deviceId, false);
|
||||
progressBar.completeStep();
|
||||
|
||||
progressBar.startStep(1, 'Chunk upload');
|
||||
await uploadFileChunks(
|
||||
filePath,
|
||||
sessionInfo.session_id,
|
||||
sessionInfo.total_chunks,
|
||||
sessionInfo.chunk_size,
|
||||
deviceId,
|
||||
progressBar,
|
||||
);
|
||||
progressBar.completeStep();
|
||||
|
||||
progressBar.startStep(2, 'Completing upload');
|
||||
const traceId = await completeChunkUpload(sessionInfo.session_id, deviceId);
|
||||
progressBar.completeStep();
|
||||
|
||||
progressBar.startStep(3, 'Waiting for processing');
|
||||
const result = await monitorChunkProgress(traceId, deviceId);
|
||||
progressBar.completeStep();
|
||||
|
||||
// Save history
|
||||
const uploadData = {
|
||||
path: filePath,
|
||||
filename: fileName,
|
||||
contentHash: result?.hash || 'unknown',
|
||||
previewHash: null,
|
||||
size: sizeCheck.size,
|
||||
fileCount: 1,
|
||||
isDirectory: false,
|
||||
shortUrl: result?.shortUrl || null,
|
||||
};
|
||||
saveUploadHistory(uploadData);
|
||||
|
||||
if (!result?.hash) {
|
||||
throw new Error('Server did not return valid hash value');
|
||||
}
|
||||
|
||||
progressBar.complete();
|
||||
return result;
|
||||
} catch (error: any) {
|
||||
progressBar.fail(error.message);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// Main export function
|
||||
export default async function (filePath: string): Promise<{
|
||||
contentHash: string;
|
||||
previewHash?: string | null;
|
||||
shortUrl?: string;
|
||||
} | null> {
|
||||
const deviceId = getDeviceId();
|
||||
if (!deviceId) {
|
||||
throw new Error('Device ID not found');
|
||||
}
|
||||
|
||||
try {
|
||||
const isDirectory = fs.statSync(filePath).isDirectory();
|
||||
const result = isDirectory
|
||||
? await uploadDirectoryInChunks(filePath, deviceId)
|
||||
: await uploadFileInChunks(filePath, deviceId);
|
||||
|
||||
if (result?.hash) {
|
||||
return {
|
||||
contentHash: result.hash,
|
||||
previewHash: null,
|
||||
shortUrl: result.shortUrl,
|
||||
};
|
||||
}
|
||||
return null;
|
||||
} catch (error: any) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pinme",
|
||||
"version": "1.1.2",
|
||||
"version": "1.1.3",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
@@ -26,6 +26,7 @@
|
||||
"author": "Glitter Protocol",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"archiver": "^7.0.1",
|
||||
"axios": "^1.3.2",
|
||||
"base-x": "^5.0.1",
|
||||
"bip39": "^3.1.0",
|
||||
|
||||
Generated
+410
@@ -8,6 +8,9 @@ importers:
|
||||
|
||||
.:
|
||||
dependencies:
|
||||
archiver:
|
||||
specifier: ^7.0.1
|
||||
version: 7.0.1
|
||||
axios:
|
||||
specifier: ^1.3.2
|
||||
version: 1.3.2
|
||||
@@ -363,6 +366,10 @@ packages:
|
||||
'@humanwhocodes/object-schema@1.2.1':
|
||||
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
|
||||
|
||||
'@isaacs/cliui@8.0.2':
|
||||
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.5':
|
||||
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
@@ -400,6 +407,10 @@ packages:
|
||||
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
|
||||
engines: {node: '>= 8'}
|
||||
|
||||
'@pkgjs/parseargs@0.11.0':
|
||||
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
'@rollup/plugin-commonjs@22.0.2':
|
||||
resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
@@ -447,6 +458,10 @@ packages:
|
||||
'@types/resolve@1.17.1':
|
||||
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
|
||||
|
||||
abort-controller@3.0.0:
|
||||
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
|
||||
engines: {node: '>=6.5'}
|
||||
|
||||
acorn-jsx@5.3.2:
|
||||
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
||||
peerDependencies:
|
||||
@@ -475,6 +490,10 @@ packages:
|
||||
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
ansi-regex@6.1.0:
|
||||
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
ansi-styles@3.2.1:
|
||||
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -483,6 +502,18 @@ packages:
|
||||
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
ansi-styles@6.2.1:
|
||||
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
archiver-utils@5.0.2:
|
||||
resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
archiver@7.0.1:
|
||||
resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
argparse@2.0.1:
|
||||
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
||||
|
||||
@@ -502,6 +533,9 @@ packages:
|
||||
resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
async@3.2.6:
|
||||
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
|
||||
|
||||
asynckit@0.4.0:
|
||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
||||
|
||||
@@ -512,9 +546,15 @@ packages:
|
||||
axios@1.3.2:
|
||||
resolution: {integrity: sha512-1M3O703bYqYuPhbHeya5bnhpYVsDDRyQSabNja04mZtboLNSuZ4YrltestrLXfHgmzua4TpUqRiVKbiQuo2epw==}
|
||||
|
||||
b4a@1.6.7:
|
||||
resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
|
||||
|
||||
balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
|
||||
bare-events@2.6.1:
|
||||
resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==}
|
||||
|
||||
base-x@5.0.1:
|
||||
resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==}
|
||||
|
||||
@@ -539,6 +579,9 @@ packages:
|
||||
brace-expansion@1.1.11:
|
||||
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
|
||||
|
||||
brace-expansion@2.0.2:
|
||||
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
|
||||
|
||||
braces@3.0.2:
|
||||
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -546,12 +589,19 @@ packages:
|
||||
brorand@1.1.0:
|
||||
resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
|
||||
|
||||
buffer-crc32@1.0.0:
|
||||
resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
|
||||
buffer-from@1.1.2:
|
||||
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
|
||||
|
||||
buffer@5.7.1:
|
||||
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
||||
|
||||
buffer@6.0.3:
|
||||
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
|
||||
|
||||
builtin-modules@3.3.0:
|
||||
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -624,16 +674,36 @@ packages:
|
||||
commondir@1.0.1:
|
||||
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
|
||||
|
||||
compress-commons@6.0.2:
|
||||
resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
concat-map@0.0.1:
|
||||
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
||||
|
||||
confusing-browser-globals@1.0.11:
|
||||
resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==}
|
||||
|
||||
core-util-is@1.0.3:
|
||||
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
||||
|
||||
crc-32@1.2.2:
|
||||
resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
|
||||
engines: {node: '>=0.8'}
|
||||
hasBin: true
|
||||
|
||||
crc32-stream@6.0.0:
|
||||
resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
cross-spawn@7.0.3:
|
||||
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
|
||||
engines: {node: '>= 8'}
|
||||
|
||||
cross-spawn@7.0.6:
|
||||
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
||||
engines: {node: '>= 8'}
|
||||
|
||||
crypto-js@4.2.0:
|
||||
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
|
||||
|
||||
@@ -691,12 +761,18 @@ packages:
|
||||
resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
eastasianwidth@0.2.0:
|
||||
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
|
||||
|
||||
elliptic@6.5.4:
|
||||
resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
|
||||
|
||||
emoji-regex@8.0.0:
|
||||
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
||||
|
||||
emoji-regex@9.2.2:
|
||||
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
|
||||
|
||||
es-abstract@1.21.1:
|
||||
resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -835,6 +911,14 @@ packages:
|
||||
ethers@5.7.2:
|
||||
resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==}
|
||||
|
||||
event-target-shim@5.0.1:
|
||||
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
events@3.3.0:
|
||||
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
|
||||
engines: {node: '>=0.8.x'}
|
||||
|
||||
external-editor@3.1.0:
|
||||
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -845,6 +929,9 @@ packages:
|
||||
fast-diff@1.2.0:
|
||||
resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
|
||||
|
||||
fast-fifo@1.3.2:
|
||||
resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
|
||||
|
||||
fast-glob@3.2.12:
|
||||
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
|
||||
engines: {node: '>=8.6.0'}
|
||||
@@ -898,6 +985,10 @@ packages:
|
||||
for-each@0.3.3:
|
||||
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
|
||||
|
||||
foreground-child@3.3.1:
|
||||
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
form-data@4.0.0:
|
||||
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
|
||||
engines: {node: '>= 6'}
|
||||
@@ -943,6 +1034,10 @@ packages:
|
||||
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
||||
glob@10.4.5:
|
||||
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
|
||||
hasBin: true
|
||||
|
||||
glob@7.2.3:
|
||||
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
||||
|
||||
@@ -1110,6 +1205,10 @@ packages:
|
||||
is-shared-array-buffer@1.0.2:
|
||||
resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
|
||||
|
||||
is-stream@2.0.1:
|
||||
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
is-string@1.0.7:
|
||||
resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -1129,9 +1228,15 @@ packages:
|
||||
is-weakref@1.0.2:
|
||||
resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
|
||||
|
||||
isarray@1.0.0:
|
||||
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
|
||||
|
||||
isexe@2.0.0:
|
||||
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
||||
|
||||
jackspeak@3.4.3:
|
||||
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
|
||||
|
||||
jest-worker@26.6.2:
|
||||
resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
|
||||
engines: {node: '>= 10.13.0'}
|
||||
@@ -1165,6 +1270,10 @@ packages:
|
||||
jsonfile@6.1.0:
|
||||
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
|
||||
|
||||
lazystream@1.0.1:
|
||||
resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
|
||||
engines: {node: '>= 0.6.3'}
|
||||
|
||||
levn@0.4.1:
|
||||
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@@ -1187,6 +1296,9 @@ packages:
|
||||
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
lru-cache@10.4.3:
|
||||
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
|
||||
|
||||
magic-string@0.25.9:
|
||||
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
|
||||
|
||||
@@ -1226,9 +1338,21 @@ packages:
|
||||
minimatch@3.1.2:
|
||||
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
|
||||
|
||||
minimatch@5.1.6:
|
||||
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
minimatch@9.0.5:
|
||||
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
|
||||
minimist@1.2.7:
|
||||
resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
|
||||
|
||||
minipass@7.1.2:
|
||||
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
|
||||
ms@2.1.2:
|
||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||
|
||||
@@ -1238,6 +1362,10 @@ packages:
|
||||
natural-compare@1.4.0:
|
||||
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
||||
|
||||
normalize-path@3.0.0:
|
||||
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
object-inspect@1.12.3:
|
||||
resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
|
||||
|
||||
@@ -1292,6 +1420,9 @@ packages:
|
||||
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
package-json-from-dist@1.0.1:
|
||||
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
|
||||
|
||||
parent-module@1.0.1:
|
||||
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -1311,6 +1442,10 @@ packages:
|
||||
path-parse@1.0.7:
|
||||
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
|
||||
|
||||
path-scurry@1.11.1:
|
||||
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
|
||||
engines: {node: '>=16 || 14 >=14.18'}
|
||||
|
||||
path-type@4.0.0:
|
||||
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -1332,6 +1467,13 @@ packages:
|
||||
engines: {node: '>=10.13.0'}
|
||||
hasBin: true
|
||||
|
||||
process-nextick-args@2.0.1:
|
||||
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
|
||||
|
||||
process@0.11.10:
|
||||
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
|
||||
engines: {node: '>= 0.6.0'}
|
||||
|
||||
proxy-from-env@1.1.0:
|
||||
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
|
||||
|
||||
@@ -1345,10 +1487,20 @@ packages:
|
||||
randombytes@2.1.0:
|
||||
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
|
||||
|
||||
readable-stream@2.3.8:
|
||||
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
|
||||
|
||||
readable-stream@3.6.0:
|
||||
resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
readable-stream@4.7.0:
|
||||
resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
|
||||
readdir-glob@1.1.3:
|
||||
resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
|
||||
|
||||
regexp.prototype.flags@1.4.3:
|
||||
resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -1406,6 +1558,9 @@ packages:
|
||||
rxjs@7.8.1:
|
||||
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
|
||||
|
||||
safe-buffer@5.1.2:
|
||||
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
|
||||
|
||||
safe-buffer@5.2.1:
|
||||
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
|
||||
|
||||
@@ -1439,6 +1594,10 @@ packages:
|
||||
signal-exit@3.0.7:
|
||||
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
|
||||
|
||||
signal-exit@4.1.0:
|
||||
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
slash@3.0.0:
|
||||
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -1454,16 +1613,26 @@ packages:
|
||||
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
|
||||
deprecated: Please use @jridgewell/sourcemap-codec instead
|
||||
|
||||
streamx@2.22.1:
|
||||
resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==}
|
||||
|
||||
string-width@4.2.3:
|
||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
string-width@5.1.2:
|
||||
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
string.prototype.trimend@1.0.6:
|
||||
resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
|
||||
|
||||
string.prototype.trimstart@1.0.6:
|
||||
resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
|
||||
|
||||
string_decoder@1.1.1:
|
||||
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
|
||||
|
||||
string_decoder@1.3.0:
|
||||
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
|
||||
|
||||
@@ -1475,6 +1644,10 @@ packages:
|
||||
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
strip-ansi@7.1.0:
|
||||
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
strip-bom@3.0.0:
|
||||
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -1495,11 +1668,17 @@ packages:
|
||||
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
tar-stream@3.1.7:
|
||||
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
|
||||
|
||||
terser@5.31.0:
|
||||
resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
|
||||
text-decoder@1.2.3:
|
||||
resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
|
||||
|
||||
text-table@0.2.0:
|
||||
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
||||
|
||||
@@ -1579,6 +1758,14 @@ packages:
|
||||
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
wrap-ansi@7.0.0:
|
||||
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
wrap-ansi@8.1.0:
|
||||
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
wrappy@1.0.2:
|
||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||
|
||||
@@ -1598,6 +1785,10 @@ packages:
|
||||
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
zip-stream@6.0.1:
|
||||
resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
snapshots:
|
||||
|
||||
'@babel/code-frame@7.22.10':
|
||||
@@ -1969,6 +2160,15 @@ snapshots:
|
||||
|
||||
'@humanwhocodes/object-schema@1.2.1': {}
|
||||
|
||||
'@isaacs/cliui@8.0.2':
|
||||
dependencies:
|
||||
string-width: 5.1.2
|
||||
string-width-cjs: string-width@4.2.3
|
||||
strip-ansi: 7.1.0
|
||||
strip-ansi-cjs: strip-ansi@6.0.1
|
||||
wrap-ansi: 8.1.0
|
||||
wrap-ansi-cjs: wrap-ansi@7.0.0
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.5':
|
||||
dependencies:
|
||||
'@jridgewell/set-array': 1.2.1
|
||||
@@ -2005,6 +2205,9 @@ snapshots:
|
||||
'@nodelib/fs.scandir': 2.1.5
|
||||
fastq: 1.15.0
|
||||
|
||||
'@pkgjs/parseargs@0.11.0':
|
||||
optional: true
|
||||
|
||||
'@rollup/plugin-commonjs@22.0.2(rollup@2.79.2)':
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 3.1.0(rollup@2.79.2)
|
||||
@@ -2061,6 +2264,10 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/node': 16.18.12
|
||||
|
||||
abort-controller@3.0.0:
|
||||
dependencies:
|
||||
event-target-shim: 5.0.1
|
||||
|
||||
acorn-jsx@5.3.2(acorn@8.8.2):
|
||||
dependencies:
|
||||
acorn: 8.8.2
|
||||
@@ -2084,6 +2291,8 @@ snapshots:
|
||||
|
||||
ansi-regex@5.0.1: {}
|
||||
|
||||
ansi-regex@6.1.0: {}
|
||||
|
||||
ansi-styles@3.2.1:
|
||||
dependencies:
|
||||
color-convert: 1.9.3
|
||||
@@ -2092,6 +2301,28 @@ snapshots:
|
||||
dependencies:
|
||||
color-convert: 2.0.1
|
||||
|
||||
ansi-styles@6.2.1: {}
|
||||
|
||||
archiver-utils@5.0.2:
|
||||
dependencies:
|
||||
glob: 10.4.5
|
||||
graceful-fs: 4.2.10
|
||||
is-stream: 2.0.1
|
||||
lazystream: 1.0.1
|
||||
lodash: 4.17.21
|
||||
normalize-path: 3.0.0
|
||||
readable-stream: 4.7.0
|
||||
|
||||
archiver@7.0.1:
|
||||
dependencies:
|
||||
archiver-utils: 5.0.2
|
||||
async: 3.2.6
|
||||
buffer-crc32: 1.0.0
|
||||
readable-stream: 4.7.0
|
||||
readdir-glob: 1.1.3
|
||||
tar-stream: 3.1.7
|
||||
zip-stream: 6.0.1
|
||||
|
||||
argparse@2.0.1: {}
|
||||
|
||||
array-includes@3.1.6:
|
||||
@@ -2118,6 +2349,8 @@ snapshots:
|
||||
es-abstract: 1.21.1
|
||||
es-shim-unscopables: 1.0.0
|
||||
|
||||
async@3.2.6: {}
|
||||
|
||||
asynckit@0.4.0: {}
|
||||
|
||||
available-typed-arrays@1.0.5: {}
|
||||
@@ -2130,8 +2363,13 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
|
||||
b4a@1.6.7: {}
|
||||
|
||||
balanced-match@1.0.2: {}
|
||||
|
||||
bare-events@2.6.1:
|
||||
optional: true
|
||||
|
||||
base-x@5.0.1: {}
|
||||
|
||||
base64-js@1.5.1: {}
|
||||
@@ -2157,12 +2395,18 @@ snapshots:
|
||||
balanced-match: 1.0.2
|
||||
concat-map: 0.0.1
|
||||
|
||||
brace-expansion@2.0.2:
|
||||
dependencies:
|
||||
balanced-match: 1.0.2
|
||||
|
||||
braces@3.0.2:
|
||||
dependencies:
|
||||
fill-range: 7.0.1
|
||||
|
||||
brorand@1.1.0: {}
|
||||
|
||||
buffer-crc32@1.0.0: {}
|
||||
|
||||
buffer-from@1.1.2: {}
|
||||
|
||||
buffer@5.7.1:
|
||||
@@ -2170,6 +2414,11 @@ snapshots:
|
||||
base64-js: 1.5.1
|
||||
ieee754: 1.2.1
|
||||
|
||||
buffer@6.0.3:
|
||||
dependencies:
|
||||
base64-js: 1.5.1
|
||||
ieee754: 1.2.1
|
||||
|
||||
builtin-modules@3.3.0: {}
|
||||
|
||||
call-bind@1.0.2:
|
||||
@@ -2230,16 +2479,39 @@ snapshots:
|
||||
|
||||
commondir@1.0.1: {}
|
||||
|
||||
compress-commons@6.0.2:
|
||||
dependencies:
|
||||
crc-32: 1.2.2
|
||||
crc32-stream: 6.0.0
|
||||
is-stream: 2.0.1
|
||||
normalize-path: 3.0.0
|
||||
readable-stream: 4.7.0
|
||||
|
||||
concat-map@0.0.1: {}
|
||||
|
||||
confusing-browser-globals@1.0.11: {}
|
||||
|
||||
core-util-is@1.0.3: {}
|
||||
|
||||
crc-32@1.2.2: {}
|
||||
|
||||
crc32-stream@6.0.0:
|
||||
dependencies:
|
||||
crc-32: 1.2.2
|
||||
readable-stream: 4.7.0
|
||||
|
||||
cross-spawn@7.0.3:
|
||||
dependencies:
|
||||
path-key: 3.1.1
|
||||
shebang-command: 2.0.0
|
||||
which: 2.0.2
|
||||
|
||||
cross-spawn@7.0.6:
|
||||
dependencies:
|
||||
path-key: 3.1.1
|
||||
shebang-command: 2.0.0
|
||||
which: 2.0.2
|
||||
|
||||
crypto-js@4.2.0: {}
|
||||
|
||||
dayjs@1.11.7: {}
|
||||
@@ -2281,6 +2553,8 @@ snapshots:
|
||||
|
||||
dotenv@16.5.0: {}
|
||||
|
||||
eastasianwidth@0.2.0: {}
|
||||
|
||||
elliptic@6.5.4:
|
||||
dependencies:
|
||||
bn.js: 4.12.1
|
||||
@@ -2293,6 +2567,8 @@ snapshots:
|
||||
|
||||
emoji-regex@8.0.0: {}
|
||||
|
||||
emoji-regex@9.2.2: {}
|
||||
|
||||
es-abstract@1.21.1:
|
||||
dependencies:
|
||||
available-typed-arrays: 1.0.5
|
||||
@@ -2554,6 +2830,10 @@ snapshots:
|
||||
- bufferutil
|
||||
- utf-8-validate
|
||||
|
||||
event-target-shim@5.0.1: {}
|
||||
|
||||
events@3.3.0: {}
|
||||
|
||||
external-editor@3.1.0:
|
||||
dependencies:
|
||||
chardet: 0.7.0
|
||||
@@ -2564,6 +2844,8 @@ snapshots:
|
||||
|
||||
fast-diff@1.2.0: {}
|
||||
|
||||
fast-fifo@1.3.2: {}
|
||||
|
||||
fast-glob@3.2.12:
|
||||
dependencies:
|
||||
'@nodelib/fs.stat': 2.0.5
|
||||
@@ -2612,6 +2894,11 @@ snapshots:
|
||||
dependencies:
|
||||
is-callable: 1.2.7
|
||||
|
||||
foreground-child@3.3.1:
|
||||
dependencies:
|
||||
cross-spawn: 7.0.6
|
||||
signal-exit: 4.1.0
|
||||
|
||||
form-data@4.0.0:
|
||||
dependencies:
|
||||
asynckit: 0.4.0
|
||||
@@ -2665,6 +2952,15 @@ snapshots:
|
||||
dependencies:
|
||||
is-glob: 4.0.3
|
||||
|
||||
glob@10.4.5:
|
||||
dependencies:
|
||||
foreground-child: 3.3.1
|
||||
jackspeak: 3.4.3
|
||||
minimatch: 9.0.5
|
||||
minipass: 7.1.2
|
||||
package-json-from-dist: 1.0.1
|
||||
path-scurry: 1.11.1
|
||||
|
||||
glob@7.2.3:
|
||||
dependencies:
|
||||
fs.realpath: 1.0.0
|
||||
@@ -2846,6 +3142,8 @@ snapshots:
|
||||
dependencies:
|
||||
call-bind: 1.0.2
|
||||
|
||||
is-stream@2.0.1: {}
|
||||
|
||||
is-string@1.0.7:
|
||||
dependencies:
|
||||
has-tostringtag: 1.0.0
|
||||
@@ -2868,8 +3166,16 @@ snapshots:
|
||||
dependencies:
|
||||
call-bind: 1.0.2
|
||||
|
||||
isarray@1.0.0: {}
|
||||
|
||||
isexe@2.0.0: {}
|
||||
|
||||
jackspeak@3.4.3:
|
||||
dependencies:
|
||||
'@isaacs/cliui': 8.0.2
|
||||
optionalDependencies:
|
||||
'@pkgjs/parseargs': 0.11.0
|
||||
|
||||
jest-worker@26.6.2:
|
||||
dependencies:
|
||||
'@types/node': 16.18.12
|
||||
@@ -2904,6 +3210,10 @@ snapshots:
|
||||
optionalDependencies:
|
||||
graceful-fs: 4.2.10
|
||||
|
||||
lazystream@1.0.1:
|
||||
dependencies:
|
||||
readable-stream: 2.3.8
|
||||
|
||||
levn@0.4.1:
|
||||
dependencies:
|
||||
prelude-ls: 1.2.1
|
||||
@@ -2926,6 +3236,8 @@ snapshots:
|
||||
chalk: 4.1.2
|
||||
is-unicode-supported: 0.1.0
|
||||
|
||||
lru-cache@10.4.3: {}
|
||||
|
||||
magic-string@0.25.9:
|
||||
dependencies:
|
||||
sourcemap-codec: 1.4.8
|
||||
@@ -2957,14 +3269,26 @@ snapshots:
|
||||
dependencies:
|
||||
brace-expansion: 1.1.11
|
||||
|
||||
minimatch@5.1.6:
|
||||
dependencies:
|
||||
brace-expansion: 2.0.2
|
||||
|
||||
minimatch@9.0.5:
|
||||
dependencies:
|
||||
brace-expansion: 2.0.2
|
||||
|
||||
minimist@1.2.7: {}
|
||||
|
||||
minipass@7.1.2: {}
|
||||
|
||||
ms@2.1.2: {}
|
||||
|
||||
mute-stream@0.0.8: {}
|
||||
|
||||
natural-compare@1.4.0: {}
|
||||
|
||||
normalize-path@3.0.0: {}
|
||||
|
||||
object-inspect@1.12.3: {}
|
||||
|
||||
object-keys@1.1.1: {}
|
||||
@@ -3040,6 +3364,8 @@ snapshots:
|
||||
dependencies:
|
||||
p-limit: 3.1.0
|
||||
|
||||
package-json-from-dist@1.0.1: {}
|
||||
|
||||
parent-module@1.0.1:
|
||||
dependencies:
|
||||
callsites: 3.1.0
|
||||
@@ -3052,6 +3378,11 @@ snapshots:
|
||||
|
||||
path-parse@1.0.7: {}
|
||||
|
||||
path-scurry@1.11.1:
|
||||
dependencies:
|
||||
lru-cache: 10.4.3
|
||||
minipass: 7.1.2
|
||||
|
||||
path-type@4.0.0: {}
|
||||
|
||||
picomatch@2.3.1: {}
|
||||
@@ -3064,6 +3395,10 @@ snapshots:
|
||||
|
||||
prettier@2.8.3: {}
|
||||
|
||||
process-nextick-args@2.0.1: {}
|
||||
|
||||
process@0.11.10: {}
|
||||
|
||||
proxy-from-env@1.1.0: {}
|
||||
|
||||
punycode@2.3.0: {}
|
||||
@@ -3074,12 +3409,34 @@ snapshots:
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
|
||||
readable-stream@2.3.8:
|
||||
dependencies:
|
||||
core-util-is: 1.0.3
|
||||
inherits: 2.0.4
|
||||
isarray: 1.0.0
|
||||
process-nextick-args: 2.0.1
|
||||
safe-buffer: 5.1.2
|
||||
string_decoder: 1.1.1
|
||||
util-deprecate: 1.0.2
|
||||
|
||||
readable-stream@3.6.0:
|
||||
dependencies:
|
||||
inherits: 2.0.4
|
||||
string_decoder: 1.3.0
|
||||
util-deprecate: 1.0.2
|
||||
|
||||
readable-stream@4.7.0:
|
||||
dependencies:
|
||||
abort-controller: 3.0.0
|
||||
buffer: 6.0.3
|
||||
events: 3.3.0
|
||||
process: 0.11.10
|
||||
string_decoder: 1.3.0
|
||||
|
||||
readdir-glob@1.1.3:
|
||||
dependencies:
|
||||
minimatch: 5.1.6
|
||||
|
||||
regexp.prototype.flags@1.4.3:
|
||||
dependencies:
|
||||
call-bind: 1.0.2
|
||||
@@ -3142,6 +3499,8 @@ snapshots:
|
||||
dependencies:
|
||||
tslib: 2.6.1
|
||||
|
||||
safe-buffer@5.1.2: {}
|
||||
|
||||
safe-buffer@5.2.1: {}
|
||||
|
||||
safe-regex-test@1.0.0:
|
||||
@@ -3174,6 +3533,8 @@ snapshots:
|
||||
|
||||
signal-exit@3.0.7: {}
|
||||
|
||||
signal-exit@4.1.0: {}
|
||||
|
||||
slash@3.0.0: {}
|
||||
|
||||
source-map-support@0.5.21:
|
||||
@@ -3185,12 +3546,25 @@ snapshots:
|
||||
|
||||
sourcemap-codec@1.4.8: {}
|
||||
|
||||
streamx@2.22.1:
|
||||
dependencies:
|
||||
fast-fifo: 1.3.2
|
||||
text-decoder: 1.2.3
|
||||
optionalDependencies:
|
||||
bare-events: 2.6.1
|
||||
|
||||
string-width@4.2.3:
|
||||
dependencies:
|
||||
emoji-regex: 8.0.0
|
||||
is-fullwidth-code-point: 3.0.0
|
||||
strip-ansi: 6.0.1
|
||||
|
||||
string-width@5.1.2:
|
||||
dependencies:
|
||||
eastasianwidth: 0.2.0
|
||||
emoji-regex: 9.2.2
|
||||
strip-ansi: 7.1.0
|
||||
|
||||
string.prototype.trimend@1.0.6:
|
||||
dependencies:
|
||||
call-bind: 1.0.2
|
||||
@@ -3203,6 +3577,10 @@ snapshots:
|
||||
define-properties: 1.1.4
|
||||
es-abstract: 1.21.1
|
||||
|
||||
string_decoder@1.1.1:
|
||||
dependencies:
|
||||
safe-buffer: 5.1.2
|
||||
|
||||
string_decoder@1.3.0:
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
@@ -3215,6 +3593,10 @@ snapshots:
|
||||
dependencies:
|
||||
ansi-regex: 5.0.1
|
||||
|
||||
strip-ansi@7.1.0:
|
||||
dependencies:
|
||||
ansi-regex: 6.1.0
|
||||
|
||||
strip-bom@3.0.0: {}
|
||||
|
||||
strip-json-comments@3.1.1: {}
|
||||
@@ -3229,6 +3611,12 @@ snapshots:
|
||||
|
||||
supports-preserve-symlinks-flag@1.0.0: {}
|
||||
|
||||
tar-stream@3.1.7:
|
||||
dependencies:
|
||||
b4a: 1.6.7
|
||||
fast-fifo: 1.3.2
|
||||
streamx: 2.22.1
|
||||
|
||||
terser@5.31.0:
|
||||
dependencies:
|
||||
'@jridgewell/source-map': 0.3.6
|
||||
@@ -3236,6 +3624,10 @@ snapshots:
|
||||
commander: 2.20.3
|
||||
source-map-support: 0.5.21
|
||||
|
||||
text-decoder@1.2.3:
|
||||
dependencies:
|
||||
b4a: 1.6.7
|
||||
|
||||
text-table@0.2.0: {}
|
||||
|
||||
through@2.3.8: {}
|
||||
@@ -3323,8 +3715,26 @@ snapshots:
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
|
||||
wrap-ansi@7.0.0:
|
||||
dependencies:
|
||||
ansi-styles: 4.3.0
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
|
||||
wrap-ansi@8.1.0:
|
||||
dependencies:
|
||||
ansi-styles: 6.2.1
|
||||
string-width: 5.1.2
|
||||
strip-ansi: 7.1.0
|
||||
|
||||
wrappy@1.0.2: {}
|
||||
|
||||
ws@7.4.6: {}
|
||||
|
||||
yocto-queue@0.1.0: {}
|
||||
|
||||
zip-stream@6.0.1:
|
||||
dependencies:
|
||||
archiver-utils: 5.0.2
|
||||
compress-commons: 6.0.2
|
||||
readable-stream: 4.7.0
|
||||
|
||||
Reference in New Issue
Block a user