@dbcube/core 1.0.60 → 1.0.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.cjs CHANGED
@@ -149,10 +149,11 @@ var Arquitecture = class {
149
149
  var fs = __toESM(require("fs"));
150
150
  var path = __toESM(require("path"));
151
151
  var os2 = __toESM(require("os"));
152
- var import_follow_redirects = require("follow-redirects");
152
+ var import_follow_redirects = __toESM(require("follow-redirects"));
153
153
  var unzipper = __toESM(require("unzipper"));
154
154
  var import_ora = __toESM(require("ora"));
155
155
  var import_chalk = __toESM(require("chalk"));
156
+ var { https } = import_follow_redirects.default;
156
157
  var Downloader = class {
157
158
  static mainSpinner = null;
158
159
  static currentSpinner = null;
@@ -281,7 +282,7 @@ var Downloader = class {
281
282
  }
282
283
  static downloadFileWithProgress(url, outputPath, prefix) {
283
284
  return new Promise((resolve2, reject) => {
284
- const request = import_follow_redirects.https.get(url, { timeout: 0 }, (response) => {
285
+ const request = https.get(url, { timeout: 0 }, (response) => {
285
286
  if (response.statusCode === 302 || response.statusCode === 301) {
286
287
  const redirectUrl = response.headers.location;
287
288
  if (redirectUrl) {
package/dist/bin.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/Arquitecture.ts","../src/lib/Donwloader.ts","../src/bin.ts"],"sourcesContent":["import * as os from 'os';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\n\r\ninterface SystemInfo {\r\n platform: string;\r\n arch: string;\r\n release: string;\r\n type: string;\r\n endianness: string;\r\n cpus: number;\r\n}\r\n\r\ninterface BinaryInfo {\r\n name: string;\r\n path: string;\r\n exists: boolean;\r\n executable: boolean;\r\n}\r\n\r\nclass Arquitecture {\r\n private systemInfo: SystemInfo;\r\n\r\n constructor() {\r\n this.systemInfo = this.detectSystemInfo();\r\n }\r\n\r\n /**\r\n * Detecta información completa del sistema\r\n */\r\n private detectSystemInfo(): SystemInfo {\r\n return {\r\n platform: os.platform(),\r\n arch: os.arch(),\r\n release: os.release(),\r\n type: os.type(),\r\n endianness: os.endianness(),\r\n cpus: os.cpus().length\r\n };\r\n }\r\n\r\n /**\r\n * Obtiene la plataforma normalizada\r\n */\r\n getPlatform(): string {\r\n const platform = this.systemInfo.platform;\r\n \r\n switch (platform) {\r\n case 'win32':\r\n return 'windows';\r\n case 'darwin':\r\n return 'macos';\r\n case 'linux':\r\n return 'linux';\r\n case 'freebsd':\r\n return 'freebsd';\r\n case 'openbsd':\r\n return 'openbsd';\r\n case 'sunos':\r\n return 'solaris';\r\n default:\r\n return platform;\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene la arquitectura normalizada\r\n */\r\n getArchitecture(): string {\r\n const arch = this.systemInfo.arch;\r\n \r\n switch (arch) {\r\n case 'x64':\r\n return 'x86_64';\r\n case 'x32':\r\n case 'ia32':\r\n return 'i686';\r\n case 'arm64':\r\n return 'aarch64';\r\n case 'arm':\r\n return 'armv7';\r\n case 'ppc64':\r\n return 'powerpc64';\r\n case 'ppc':\r\n return 'powerpc';\r\n case 's390x':\r\n return 's390x';\r\n case 'mips':\r\n return 'mips';\r\n case 'mipsel':\r\n return 'mipsel';\r\n default:\r\n return arch;\r\n }\r\n }\r\n\r\n /**\r\n * Genera el nombre del binario basado en la arquitectura\r\n */\r\n getBinaryName(baseName: string): string {\r\n const platform = this.getPlatform();\r\n const arch = this.getArchitecture();\r\n const extension = platform === 'windows' ? '.exe' : '';\r\n \r\n return `${baseName}-${platform}-${arch}${extension}`;\r\n }\r\n\r\n /**\r\n * Obtiene información completa del sistema\r\n */\r\n getSystemInfo(): SystemInfo {\r\n return { ...this.systemInfo };\r\n }\r\n\r\n /**\r\n * Obtiene el triple de destino (target triple) para Rust\r\n */\r\n getRustTargetTriple(): string {\r\n const platform = this.getPlatform();\r\n const arch = this.getArchitecture();\r\n \r\n // Mapeo de plataformas y arquitecturas a target triples de Rust\r\n const targetMap: { [key: string]: string } = {\r\n 'linux-x86_64': 'x86_64-unknown-linux-gnu',\r\n 'linux-i686': 'i686-unknown-linux-gnu',\r\n 'linux-aarch64': 'aarch64-unknown-linux-gnu',\r\n 'linux-armv7': 'armv7-unknown-linux-gnueabihf',\r\n 'macos-x86_64': 'x86_64-apple-darwin',\r\n 'macos-aarch64': 'aarch64-apple-darwin',\r\n 'windows-x86_64': 'x86_64-pc-windows-msvc',\r\n 'windows-i686': 'i686-pc-windows-msvc',\r\n 'windows-aarch64': 'aarch64-pc-windows-msvc',\r\n 'freebsd-x86_64': 'x86_64-unknown-freebsd',\r\n };\r\n \r\n const key = `${platform}-${arch}`;\r\n return targetMap[key] || `${arch}-unknown-${platform}`;\r\n }\r\n\r\n /**\r\n * Muestra información detallada del sistema\r\n */\r\n printSystemInfo(): void {\r\n console.log('🖥️ System Information:');\r\n console.log('├─ Platform:', this.getPlatform());\r\n console.log('├─ Arquitecture:', this.getArchitecture());\r\n console.log('├─ OS Type:', this.systemInfo.type);\r\n console.log('├─ OS Release:', this.systemInfo.release);\r\n console.log('├─ Endianness:', this.systemInfo.endianness);\r\n console.log('├─ CPUs:', this.systemInfo.cpus);\r\n console.log('└─ Rust Target:', this.getRustTargetTriple());\r\n }\r\n}\r\n\r\nexport { \r\n Arquitecture, \r\n SystemInfo,\r\n BinaryInfo\r\n};","import { BinaryType } from \"../@types/Binary\";\r\nimport { Arquitecture } from \"./Arquitecture\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport * as os from \"os\";\r\nimport { https } from 'follow-redirects';\r\nimport * as unzipper from \"unzipper\";\r\nimport { IncomingMessage } from 'http';\r\nimport ora from \"ora\";\r\nimport chalk from \"chalk\";\r\n\r\ninterface DownloadProgress {\r\n downloaded: number;\r\n total: number;\r\n percentage: number;\r\n}\r\n\r\nclass Downloader {\r\n private static mainSpinner: any = null;\r\n private static currentSpinner: any = null;\r\n\r\n static get(prefix: string): BinaryType & { name: string; url: string } {\r\n const arch = new Arquitecture();\r\n const platform = arch.getPlatform();\r\n const architecture = arch.getArchitecture();\r\n\r\n const platformMap: Record<string, string> = {\r\n windows: \"windows\",\r\n linux: \"linux\",\r\n darwin: \"macos\"\r\n };\r\n\r\n const archMap: Record<string, string> = {\r\n x86_64: \"x64\",\r\n aarch64: \"arm64\"\r\n };\r\n\r\n const plat = platformMap[platform];\r\n const archSuffix = archMap[architecture];\r\n\r\n if (plat && archSuffix) {\r\n const baseName = `${prefix}-engine-${plat}-${archSuffix}`;\r\n const binaryName = platform === \"windows\" ? `${baseName}.exe` : baseName;\r\n\r\n const url = `https://github.com/Dbcube/binaries/releases/download/${prefix}-engine/${prefix}-engine-latest-${plat}-${archSuffix}.zip`;\r\n return {\r\n name: binaryName,\r\n url,\r\n query_engine: binaryName,\r\n schema_engine: `${prefix}-engine-${plat}-${archSuffix}${platform === \"windows\" ? \".exe\" : \"\"}`\r\n };\r\n }\r\n\r\n return {\r\n name: \"\",\r\n url: \"\",\r\n query_engine: \"\",\r\n schema_engine: \"\"\r\n };\r\n }\r\n\r\n static async download(targetDir?: string): Promise<void> {\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n const binDir = targetDir || this.getDefaultBinDir();\r\n fs.mkdirSync(binDir, { recursive: true });\r\n\r\n // Initialize main spinner\r\n this.mainSpinner = ora({\r\n text: chalk.blue('Descargando binarios necesarios...'),\r\n spinner: 'dots12'\r\n }).start();\r\n\r\n // Check which binaries need to be downloaded\r\n const binariesToDownload = [];\r\n let existingCount = 0;\r\n\r\n for (const prefix of binaries) {\r\n const binaryInfo = this.get(prefix);\r\n if (!binaryInfo.name || !binaryInfo.url) {\r\n throw new Error(`Plataforma o arquitectura no soportada para ${prefix}`);\r\n }\r\n\r\n const finalBinaryPath = path.join(binDir, binaryInfo.name);\r\n if (fs.existsSync(finalBinaryPath)) {\r\n existingCount++;\r\n continue;\r\n }\r\n\r\n binariesToDownload.push({\r\n prefix,\r\n binaryInfo,\r\n tempZipPath: path.join(os.tmpdir(), `dbcube-${prefix}-${Date.now()}.zip`),\r\n finalBinaryPath\r\n });\r\n }\r\n\r\n if (binariesToDownload.length === 0) {\r\n this.mainSpinner.succeed(chalk.green('Todos los binarios ya están descargados'));\r\n return;\r\n }\r\n\r\n // Show initial progress\r\n this.updateMainProgress('paralelo', existingCount, binaries.length, 'downloading');\r\n\r\n try {\r\n // Download all binaries in parallel\r\n await Promise.all(binariesToDownload.map(async (binary, index) => {\r\n const maxRetries = 3;\r\n let attempt = 0;\r\n\r\n while (attempt <= maxRetries) {\r\n try {\r\n // Download\r\n await this.downloadFileWithProgress(binary.binaryInfo.url, binary.tempZipPath, binary.prefix);\r\n\r\n // Extract\r\n await this.extractBinary(binary.tempZipPath, binary.finalBinaryPath, binary.prefix);\r\n\r\n // Update progress\r\n const completed = existingCount + index + 1;\r\n this.updateMainProgress(binary.prefix, completed, binaries.length, 'completed');\r\n break;\r\n\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n\r\n if (attempt < maxRetries && (\r\n errorMessage.includes('ECONNRESET') ||\r\n errorMessage.includes('timeout') ||\r\n errorMessage.includes('ETIMEDOUT') ||\r\n errorMessage.includes('ENOTFOUND')\r\n )) {\r\n attempt++;\r\n this.updateMainProgress(binary.prefix, existingCount, binaries.length, 'retrying', attempt);\r\n await new Promise(resolve => setTimeout(resolve, 1000 + Math.random() * 1000)); // Random delay to avoid conflicts\r\n } else {\r\n throw new Error(`Error descargando ${binary.prefix}: ${errorMessage}`);\r\n }\r\n }\r\n }\r\n }));\r\n\r\n // Complete successfully\r\n this.mainSpinner.succeed(chalk.green('Binarios descargados correctamente'));\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n this.mainSpinner.fail(chalk.red(`Error en descarga paralela: ${errorMessage}`));\r\n throw error;\r\n }\r\n }\r\n\r\n private static updateMainProgress(binary: string, current: number, total: number, status: string, attempt?: number) {\r\n const progressBar = this.createProgressBar(current, total);\r\n const statusEmojis = {\r\n downloading: '📥',\r\n extracting: '📦',\r\n completed: '✅',\r\n exists: '✅',\r\n retrying: '🔄'\r\n };\r\n\r\n const statusMessages = {\r\n downloading: chalk.blue('descargando'),\r\n extracting: chalk.yellow('extrayendo'),\r\n completed: chalk.green('completado'),\r\n exists: chalk.gray('existe'),\r\n retrying: chalk.yellow(`reintentando (${attempt}/${3})`)\r\n };\r\n\r\n const emoji = statusEmojis[status as keyof typeof statusEmojis] || '📥';\r\n const message = statusMessages[status as keyof typeof statusMessages] || status;\r\n\r\n this.mainSpinner.text = `${progressBar} ${emoji} ${chalk.bold(binary)} - ${message}`;\r\n }\r\n\r\n private static createProgressBar(current: number, total: number, width: number = 20): string {\r\n const filled = Math.round((current / total) * width);\r\n const empty = width - filled;\r\n const filledBar = chalk.green('█'.repeat(filled));\r\n const emptyBar = chalk.gray('░'.repeat(empty));\r\n const percentage = chalk.bold(`${current}/${total}`);\r\n return `[${filledBar}${emptyBar}] ${percentage}`;\r\n }\r\n\r\n private static downloadFileWithProgress(url: string, outputPath: string, prefix: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const request = https.get(url, { timeout: 0 }, (response: IncomingMessage) => {\r\n if (response.statusCode === 302 || response.statusCode === 301) {\r\n const redirectUrl = response.headers.location;\r\n if (redirectUrl) {\r\n return this.downloadFileWithProgress(redirectUrl, outputPath, prefix).then(resolve).catch(reject);\r\n }\r\n }\r\n\r\n if (response.statusCode !== 200) {\r\n reject(new Error(`HTTP ${response.statusCode} para ${prefix}`));\r\n return;\r\n }\r\n\r\n const file = fs.createWriteStream(outputPath);\r\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\r\n let downloadedBytes = 0;\r\n\r\n response.on('data', (chunk) => {\r\n downloadedBytes += chunk.length;\r\n file.write(chunk);\r\n\r\n if (totalBytes > 0) {\r\n const progress: DownloadProgress = {\r\n downloaded: downloadedBytes,\r\n total: totalBytes,\r\n percentage: (downloadedBytes / totalBytes) * 100\r\n };\r\n this.updateDownloadProgress(prefix, progress);\r\n }\r\n });\r\n\r\n response.on('end', () => {\r\n file.end();\r\n resolve();\r\n });\r\n\r\n response.on('error', (err) => {\r\n file.close();\r\n this.cleanupFile(outputPath);\r\n reject(err);\r\n });\r\n\r\n file.on('error', (err) => {\r\n file.close();\r\n this.cleanupFile(outputPath);\r\n reject(err);\r\n });\r\n });\r\n\r\n request.on('error', reject);\r\n request.on('timeout', () => {\r\n request.destroy();\r\n reject(new Error(`Timeout descargando ${prefix}`));\r\n });\r\n });\r\n }\r\n\r\n private static updateDownloadProgress(binary: string, progress: DownloadProgress) {\r\n const percentage = progress.percentage.toFixed(1);\r\n const downloaded = (progress.downloaded / 1024 / 1024).toFixed(1);\r\n const total = (progress.total / 1024 / 1024).toFixed(1);\r\n\r\n // Create a mini progress bar for the binary\r\n const barWidth = 15;\r\n const filled = Math.round((progress.percentage / 100) * barWidth);\r\n const empty = barWidth - filled;\r\n const progressBar = chalk.green('█'.repeat(filled)) + chalk.gray('░'.repeat(empty));\r\n\r\n const progressText = `[${progressBar}] ${percentage}% (${downloaded}/${total}MB)`;\r\n this.mainSpinner.text = `📥 ${chalk.bold(binary)} - ${progressText}`;\r\n }\r\n\r\n private static extractBinary(zipPath: string, outputPath: string, prefix: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n let extracted = false;\r\n\r\n fs.createReadStream(zipPath)\r\n .pipe(unzipper.Parse())\r\n .on('entry', (entry: unzipper.Entry) => {\r\n if (entry.type === 'File' && !extracted) {\r\n extracted = true;\r\n const writeStream = fs.createWriteStream(outputPath);\r\n\r\n entry.pipe(writeStream);\r\n\r\n writeStream.on('finish', () => {\r\n if (process.platform !== 'win32') {\r\n fs.chmodSync(outputPath, 0o755);\r\n }\r\n this.cleanupFile(zipPath);\r\n resolve();\r\n });\r\n\r\n writeStream.on('error', (err: Error) => {\r\n this.cleanupFile(zipPath);\r\n reject(err);\r\n });\r\n } else {\r\n entry.autodrain();\r\n }\r\n })\r\n .on('error', (err: Error) => {\r\n this.cleanupFile(zipPath);\r\n reject(err);\r\n })\r\n .on('close', () => {\r\n if (!extracted) {\r\n this.cleanupFile(zipPath);\r\n reject(new Error(`No se encontró archivo válido en el ZIP para ${prefix}`));\r\n }\r\n });\r\n });\r\n }\r\n\r\n private static cleanupFile(filePath: string): void {\r\n try {\r\n if (fs.existsSync(filePath)) {\r\n fs.unlinkSync(filePath);\r\n }\r\n } catch {\r\n // Ignore cleanup errors\r\n }\r\n }\r\n\r\n private static getDefaultBinDir(): string {\r\n // Try to find a suitable directory for binaries in order of preference\r\n const possibleDirs = [\r\n path.resolve(process.cwd(), '.dbcube', 'bin'),\r\n path.resolve(process.cwd(), 'node_modules', '.dbcube', 'bin'),\r\n path.resolve(__dirname, '..', 'bin'),\r\n ];\r\n\r\n // Use the first one that can be created or already exists\r\n for (const dir of possibleDirs) {\r\n try {\r\n if (!fs.existsSync(dir)) {\r\n fs.mkdirSync(dir, { recursive: true });\r\n }\r\n // Test write permissions\r\n const testFile = path.join(dir, '.test');\r\n fs.writeFileSync(testFile, 'test');\r\n fs.unlinkSync(testFile);\r\n return dir;\r\n } catch {\r\n // Try next directory\r\n continue;\r\n }\r\n }\r\n\r\n // Fallback to .dbcube directory in temp\r\n const tempDir = path.join(os.tmpdir(), '.dbcube', 'bin');\r\n fs.mkdirSync(tempDir, { recursive: true });\r\n return tempDir;\r\n }\r\n}\r\n\r\nexport { Downloader };","#!/usr/bin/env node\r\n\r\nimport { Downloader } from \"./lib/Donwloader\";\r\n\r\n/**\r\n * Script CLI para descargar binarios manualmente\r\n */\r\nasync function main() {\r\n const args = process.argv.slice(2);\r\n const command = args[0];\r\n\r\n switch (command) {\r\n case 'install':\r\n case 'download':\r\n console.log('🚀 Iniciando descarga de binarios DBCube...');\r\n try {\r\n await Downloader.download();\r\n console.log('✅ ¡Todos los binarios descargados exitosamente!');\r\n } catch (error) {\r\n console.error('❌ Error descargando binarios:', error);\r\n }\r\n break;\r\n\r\n case 'check':\r\n console.log('🔍 Verificando binarios...');\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n for (const prefix of binaries) {\r\n const binary = Downloader.get(prefix);\r\n console.log(`${prefix}-engine: ${binary.name}`);\r\n console.log(` URL: ${binary.url}`);\r\n }\r\n break;\r\n\r\n default:\r\n console.log('DBCube Binary Manager');\r\n console.log('');\r\n console.log('Comandos disponibles:');\r\n console.log(' install|download - Descargar todos los binarios');\r\n console.log(' check - Verificar información de binarios');\r\n console.log('');\r\n console.log('Uso:');\r\n console.log(' npx @dbcube/core install');\r\n console.log(' npx @dbcube/core check');\r\n }\r\n}\r\n\r\nmain().catch(error => {\r\n console.error('Error:', error);\r\n});"],"mappings":"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","names":["platform","arch","os","arch","platform","ora","chalk","resolve"]}
1
+ {"version":3,"sources":["../src/lib/Arquitecture.ts","../src/lib/Donwloader.ts","../src/bin.ts"],"sourcesContent":["import * as os from 'os';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\n\r\ninterface SystemInfo {\r\n platform: string;\r\n arch: string;\r\n release: string;\r\n type: string;\r\n endianness: string;\r\n cpus: number;\r\n}\r\n\r\ninterface BinaryInfo {\r\n name: string;\r\n path: string;\r\n exists: boolean;\r\n executable: boolean;\r\n}\r\n\r\nclass Arquitecture {\r\n private systemInfo: SystemInfo;\r\n\r\n constructor() {\r\n this.systemInfo = this.detectSystemInfo();\r\n }\r\n\r\n /**\r\n * Detecta información completa del sistema\r\n */\r\n private detectSystemInfo(): SystemInfo {\r\n return {\r\n platform: os.platform(),\r\n arch: os.arch(),\r\n release: os.release(),\r\n type: os.type(),\r\n endianness: os.endianness(),\r\n cpus: os.cpus().length\r\n };\r\n }\r\n\r\n /**\r\n * Obtiene la plataforma normalizada\r\n */\r\n getPlatform(): string {\r\n const platform = this.systemInfo.platform;\r\n \r\n switch (platform) {\r\n case 'win32':\r\n return 'windows';\r\n case 'darwin':\r\n return 'macos';\r\n case 'linux':\r\n return 'linux';\r\n case 'freebsd':\r\n return 'freebsd';\r\n case 'openbsd':\r\n return 'openbsd';\r\n case 'sunos':\r\n return 'solaris';\r\n default:\r\n return platform;\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene la arquitectura normalizada\r\n */\r\n getArchitecture(): string {\r\n const arch = this.systemInfo.arch;\r\n \r\n switch (arch) {\r\n case 'x64':\r\n return 'x86_64';\r\n case 'x32':\r\n case 'ia32':\r\n return 'i686';\r\n case 'arm64':\r\n return 'aarch64';\r\n case 'arm':\r\n return 'armv7';\r\n case 'ppc64':\r\n return 'powerpc64';\r\n case 'ppc':\r\n return 'powerpc';\r\n case 's390x':\r\n return 's390x';\r\n case 'mips':\r\n return 'mips';\r\n case 'mipsel':\r\n return 'mipsel';\r\n default:\r\n return arch;\r\n }\r\n }\r\n\r\n /**\r\n * Genera el nombre del binario basado en la arquitectura\r\n */\r\n getBinaryName(baseName: string): string {\r\n const platform = this.getPlatform();\r\n const arch = this.getArchitecture();\r\n const extension = platform === 'windows' ? '.exe' : '';\r\n \r\n return `${baseName}-${platform}-${arch}${extension}`;\r\n }\r\n\r\n /**\r\n * Obtiene información completa del sistema\r\n */\r\n getSystemInfo(): SystemInfo {\r\n return { ...this.systemInfo };\r\n }\r\n\r\n /**\r\n * Obtiene el triple de destino (target triple) para Rust\r\n */\r\n getRustTargetTriple(): string {\r\n const platform = this.getPlatform();\r\n const arch = this.getArchitecture();\r\n \r\n // Mapeo de plataformas y arquitecturas a target triples de Rust\r\n const targetMap: { [key: string]: string } = {\r\n 'linux-x86_64': 'x86_64-unknown-linux-gnu',\r\n 'linux-i686': 'i686-unknown-linux-gnu',\r\n 'linux-aarch64': 'aarch64-unknown-linux-gnu',\r\n 'linux-armv7': 'armv7-unknown-linux-gnueabihf',\r\n 'macos-x86_64': 'x86_64-apple-darwin',\r\n 'macos-aarch64': 'aarch64-apple-darwin',\r\n 'windows-x86_64': 'x86_64-pc-windows-msvc',\r\n 'windows-i686': 'i686-pc-windows-msvc',\r\n 'windows-aarch64': 'aarch64-pc-windows-msvc',\r\n 'freebsd-x86_64': 'x86_64-unknown-freebsd',\r\n };\r\n \r\n const key = `${platform}-${arch}`;\r\n return targetMap[key] || `${arch}-unknown-${platform}`;\r\n }\r\n\r\n /**\r\n * Muestra información detallada del sistema\r\n */\r\n printSystemInfo(): void {\r\n console.log('🖥️ System Information:');\r\n console.log('├─ Platform:', this.getPlatform());\r\n console.log('├─ Arquitecture:', this.getArchitecture());\r\n console.log('├─ OS Type:', this.systemInfo.type);\r\n console.log('├─ OS Release:', this.systemInfo.release);\r\n console.log('├─ Endianness:', this.systemInfo.endianness);\r\n console.log('├─ CPUs:', this.systemInfo.cpus);\r\n console.log('└─ Rust Target:', this.getRustTargetTriple());\r\n }\r\n}\r\n\r\nexport { \r\n Arquitecture, \r\n SystemInfo,\r\n BinaryInfo\r\n};","import { BinaryType } from \"../@types/Binary\";\r\nimport { Arquitecture } from \"./Arquitecture\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport * as os from \"os\";\r\nimport followRedirects from 'follow-redirects';\r\nconst { https } = followRedirects;\r\nimport * as unzipper from \"unzipper\";\r\nimport { IncomingMessage } from 'http';\r\nimport ora from \"ora\";\r\nimport chalk from \"chalk\";\r\n\r\ninterface DownloadProgress {\r\n downloaded: number;\r\n total: number;\r\n percentage: number;\r\n}\r\n\r\nclass Downloader {\r\n private static mainSpinner: any = null;\r\n private static currentSpinner: any = null;\r\n\r\n static get(prefix: string): BinaryType & { name: string; url: string } {\r\n const arch = new Arquitecture();\r\n const platform = arch.getPlatform();\r\n const architecture = arch.getArchitecture();\r\n\r\n const platformMap: Record<string, string> = {\r\n windows: \"windows\",\r\n linux: \"linux\",\r\n darwin: \"macos\"\r\n };\r\n\r\n const archMap: Record<string, string> = {\r\n x86_64: \"x64\",\r\n aarch64: \"arm64\"\r\n };\r\n\r\n const plat = platformMap[platform];\r\n const archSuffix = archMap[architecture];\r\n\r\n if (plat && archSuffix) {\r\n const baseName = `${prefix}-engine-${plat}-${archSuffix}`;\r\n const binaryName = platform === \"windows\" ? `${baseName}.exe` : baseName;\r\n\r\n const url = `https://github.com/Dbcube/binaries/releases/download/${prefix}-engine/${prefix}-engine-latest-${plat}-${archSuffix}.zip`;\r\n return {\r\n name: binaryName,\r\n url,\r\n query_engine: binaryName,\r\n schema_engine: `${prefix}-engine-${plat}-${archSuffix}${platform === \"windows\" ? \".exe\" : \"\"}`\r\n };\r\n }\r\n\r\n return {\r\n name: \"\",\r\n url: \"\",\r\n query_engine: \"\",\r\n schema_engine: \"\"\r\n };\r\n }\r\n\r\n static async download(targetDir?: string): Promise<void> {\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n const binDir = targetDir || this.getDefaultBinDir();\r\n fs.mkdirSync(binDir, { recursive: true });\r\n\r\n // Initialize main spinner\r\n this.mainSpinner = ora({\r\n text: chalk.blue('Descargando binarios necesarios...'),\r\n spinner: 'dots12'\r\n }).start();\r\n\r\n // Check which binaries need to be downloaded\r\n const binariesToDownload = [];\r\n let existingCount = 0;\r\n\r\n for (const prefix of binaries) {\r\n const binaryInfo = this.get(prefix);\r\n if (!binaryInfo.name || !binaryInfo.url) {\r\n throw new Error(`Plataforma o arquitectura no soportada para ${prefix}`);\r\n }\r\n\r\n const finalBinaryPath = path.join(binDir, binaryInfo.name);\r\n if (fs.existsSync(finalBinaryPath)) {\r\n existingCount++;\r\n continue;\r\n }\r\n\r\n binariesToDownload.push({\r\n prefix,\r\n binaryInfo,\r\n tempZipPath: path.join(os.tmpdir(), `dbcube-${prefix}-${Date.now()}.zip`),\r\n finalBinaryPath\r\n });\r\n }\r\n\r\n if (binariesToDownload.length === 0) {\r\n this.mainSpinner.succeed(chalk.green('Todos los binarios ya están descargados'));\r\n return;\r\n }\r\n\r\n // Show initial progress\r\n this.updateMainProgress('paralelo', existingCount, binaries.length, 'downloading');\r\n\r\n try {\r\n // Download all binaries in parallel\r\n await Promise.all(binariesToDownload.map(async (binary, index) => {\r\n const maxRetries = 3;\r\n let attempt = 0;\r\n\r\n while (attempt <= maxRetries) {\r\n try {\r\n // Download\r\n await this.downloadFileWithProgress(binary.binaryInfo.url, binary.tempZipPath, binary.prefix);\r\n\r\n // Extract\r\n await this.extractBinary(binary.tempZipPath, binary.finalBinaryPath, binary.prefix);\r\n\r\n // Update progress\r\n const completed = existingCount + index + 1;\r\n this.updateMainProgress(binary.prefix, completed, binaries.length, 'completed');\r\n break;\r\n\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n\r\n if (attempt < maxRetries && (\r\n errorMessage.includes('ECONNRESET') ||\r\n errorMessage.includes('timeout') ||\r\n errorMessage.includes('ETIMEDOUT') ||\r\n errorMessage.includes('ENOTFOUND')\r\n )) {\r\n attempt++;\r\n this.updateMainProgress(binary.prefix, existingCount, binaries.length, 'retrying', attempt);\r\n await new Promise(resolve => setTimeout(resolve, 1000 + Math.random() * 1000)); // Random delay to avoid conflicts\r\n } else {\r\n throw new Error(`Error descargando ${binary.prefix}: ${errorMessage}`);\r\n }\r\n }\r\n }\r\n }));\r\n\r\n // Complete successfully\r\n this.mainSpinner.succeed(chalk.green('Binarios descargados correctamente'));\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n this.mainSpinner.fail(chalk.red(`Error en descarga paralela: ${errorMessage}`));\r\n throw error;\r\n }\r\n }\r\n\r\n private static updateMainProgress(binary: string, current: number, total: number, status: string, attempt?: number) {\r\n const progressBar = this.createProgressBar(current, total);\r\n const statusEmojis = {\r\n downloading: '📥',\r\n extracting: '📦',\r\n completed: '✅',\r\n exists: '✅',\r\n retrying: '🔄'\r\n };\r\n\r\n const statusMessages = {\r\n downloading: chalk.blue('descargando'),\r\n extracting: chalk.yellow('extrayendo'),\r\n completed: chalk.green('completado'),\r\n exists: chalk.gray('existe'),\r\n retrying: chalk.yellow(`reintentando (${attempt}/${3})`)\r\n };\r\n\r\n const emoji = statusEmojis[status as keyof typeof statusEmojis] || '📥';\r\n const message = statusMessages[status as keyof typeof statusMessages] || status;\r\n\r\n this.mainSpinner.text = `${progressBar} ${emoji} ${chalk.bold(binary)} - ${message}`;\r\n }\r\n\r\n private static createProgressBar(current: number, total: number, width: number = 20): string {\r\n const filled = Math.round((current / total) * width);\r\n const empty = width - filled;\r\n const filledBar = chalk.green('█'.repeat(filled));\r\n const emptyBar = chalk.gray('░'.repeat(empty));\r\n const percentage = chalk.bold(`${current}/${total}`);\r\n return `[${filledBar}${emptyBar}] ${percentage}`;\r\n }\r\n\r\n private static downloadFileWithProgress(url: string, outputPath: string, prefix: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const request = https.get(url, { timeout: 0 }, (response: IncomingMessage) => {\r\n if (response.statusCode === 302 || response.statusCode === 301) {\r\n const redirectUrl = response.headers.location;\r\n if (redirectUrl) {\r\n return this.downloadFileWithProgress(redirectUrl, outputPath, prefix).then(resolve).catch(reject);\r\n }\r\n }\r\n\r\n if (response.statusCode !== 200) {\r\n reject(new Error(`HTTP ${response.statusCode} para ${prefix}`));\r\n return;\r\n }\r\n\r\n const file = fs.createWriteStream(outputPath);\r\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\r\n let downloadedBytes = 0;\r\n\r\n response.on('data', (chunk) => {\r\n downloadedBytes += chunk.length;\r\n file.write(chunk);\r\n\r\n if (totalBytes > 0) {\r\n const progress: DownloadProgress = {\r\n downloaded: downloadedBytes,\r\n total: totalBytes,\r\n percentage: (downloadedBytes / totalBytes) * 100\r\n };\r\n this.updateDownloadProgress(prefix, progress);\r\n }\r\n });\r\n\r\n response.on('end', () => {\r\n file.end();\r\n resolve();\r\n });\r\n\r\n response.on('error', (err) => {\r\n file.close();\r\n this.cleanupFile(outputPath);\r\n reject(err);\r\n });\r\n\r\n file.on('error', (err) => {\r\n file.close();\r\n this.cleanupFile(outputPath);\r\n reject(err);\r\n });\r\n });\r\n\r\n request.on('error', reject);\r\n request.on('timeout', () => {\r\n request.destroy();\r\n reject(new Error(`Timeout descargando ${prefix}`));\r\n });\r\n });\r\n }\r\n\r\n private static updateDownloadProgress(binary: string, progress: DownloadProgress) {\r\n const percentage = progress.percentage.toFixed(1);\r\n const downloaded = (progress.downloaded / 1024 / 1024).toFixed(1);\r\n const total = (progress.total / 1024 / 1024).toFixed(1);\r\n\r\n // Create a mini progress bar for the binary\r\n const barWidth = 15;\r\n const filled = Math.round((progress.percentage / 100) * barWidth);\r\n const empty = barWidth - filled;\r\n const progressBar = chalk.green('█'.repeat(filled)) + chalk.gray('░'.repeat(empty));\r\n\r\n const progressText = `[${progressBar}] ${percentage}% (${downloaded}/${total}MB)`;\r\n this.mainSpinner.text = `📥 ${chalk.bold(binary)} - ${progressText}`;\r\n }\r\n\r\n private static extractBinary(zipPath: string, outputPath: string, prefix: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n let extracted = false;\r\n\r\n fs.createReadStream(zipPath)\r\n .pipe(unzipper.Parse())\r\n .on('entry', (entry: unzipper.Entry) => {\r\n if (entry.type === 'File' && !extracted) {\r\n extracted = true;\r\n const writeStream = fs.createWriteStream(outputPath);\r\n\r\n entry.pipe(writeStream);\r\n\r\n writeStream.on('finish', () => {\r\n if (process.platform !== 'win32') {\r\n fs.chmodSync(outputPath, 0o755);\r\n }\r\n this.cleanupFile(zipPath);\r\n resolve();\r\n });\r\n\r\n writeStream.on('error', (err: Error) => {\r\n this.cleanupFile(zipPath);\r\n reject(err);\r\n });\r\n } else {\r\n entry.autodrain();\r\n }\r\n })\r\n .on('error', (err: Error) => {\r\n this.cleanupFile(zipPath);\r\n reject(err);\r\n })\r\n .on('close', () => {\r\n if (!extracted) {\r\n this.cleanupFile(zipPath);\r\n reject(new Error(`No se encontró archivo válido en el ZIP para ${prefix}`));\r\n }\r\n });\r\n });\r\n }\r\n\r\n private static cleanupFile(filePath: string): void {\r\n try {\r\n if (fs.existsSync(filePath)) {\r\n fs.unlinkSync(filePath);\r\n }\r\n } catch {\r\n // Ignore cleanup errors\r\n }\r\n }\r\n\r\n private static getDefaultBinDir(): string {\r\n // Try to find a suitable directory for binaries in order of preference\r\n const possibleDirs = [\r\n path.resolve(process.cwd(), '.dbcube', 'bin'),\r\n path.resolve(process.cwd(), 'node_modules', '.dbcube', 'bin'),\r\n path.resolve(__dirname, '..', 'bin'),\r\n ];\r\n\r\n // Use the first one that can be created or already exists\r\n for (const dir of possibleDirs) {\r\n try {\r\n if (!fs.existsSync(dir)) {\r\n fs.mkdirSync(dir, { recursive: true });\r\n }\r\n // Test write permissions\r\n const testFile = path.join(dir, '.test');\r\n fs.writeFileSync(testFile, 'test');\r\n fs.unlinkSync(testFile);\r\n return dir;\r\n } catch {\r\n // Try next directory\r\n continue;\r\n }\r\n }\r\n\r\n // Fallback to .dbcube directory in temp\r\n const tempDir = path.join(os.tmpdir(), '.dbcube', 'bin');\r\n fs.mkdirSync(tempDir, { recursive: true });\r\n return tempDir;\r\n }\r\n}\r\n\r\nexport { Downloader };","#!/usr/bin/env node\r\n\r\nimport { Downloader } from \"./lib/Donwloader\";\r\n\r\n/**\r\n * Script CLI para descargar binarios manualmente\r\n */\r\nasync function main() {\r\n const args = process.argv.slice(2);\r\n const command = args[0];\r\n\r\n switch (command) {\r\n case 'install':\r\n case 'download':\r\n console.log('🚀 Iniciando descarga de binarios DBCube...');\r\n try {\r\n await Downloader.download();\r\n console.log('✅ ¡Todos los binarios descargados exitosamente!');\r\n } catch (error) {\r\n console.error('❌ Error descargando binarios:', error);\r\n }\r\n break;\r\n\r\n case 'check':\r\n console.log('🔍 Verificando binarios...');\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n for (const prefix of binaries) {\r\n const binary = Downloader.get(prefix);\r\n console.log(`${prefix}-engine: ${binary.name}`);\r\n console.log(` URL: ${binary.url}`);\r\n }\r\n break;\r\n\r\n default:\r\n console.log('DBCube Binary Manager');\r\n console.log('');\r\n console.log('Comandos disponibles:');\r\n console.log(' install|download - Descargar todos los binarios');\r\n console.log(' check - Verificar información de binarios');\r\n console.log('');\r\n console.log('Uso:');\r\n console.log(' npx @dbcube/core install');\r\n console.log(' npx @dbcube/core check');\r\n }\r\n}\r\n\r\nmain().catch(error => {\r\n console.error('Error:', error);\r\n});"],"mappings":"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","names":["platform","arch","os","followRedirects","arch","platform","ora","chalk","resolve"]}
package/dist/bin.js CHANGED
@@ -126,10 +126,11 @@ var Arquitecture = class {
126
126
  import * as fs from "fs";
127
127
  import * as path from "path";
128
128
  import * as os2 from "os";
129
- import { https } from "follow-redirects";
129
+ import followRedirects from "follow-redirects";
130
130
  import * as unzipper from "unzipper";
131
131
  import ora from "ora";
132
132
  import chalk from "chalk";
133
+ var { https } = followRedirects;
133
134
  var Downloader = class {
134
135
  static mainSpinner = null;
135
136
  static currentSpinner = null;
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/Arquitecture.ts","../src/lib/Donwloader.ts","../src/bin.ts"],"sourcesContent":["import * as os from 'os';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\n\r\ninterface SystemInfo {\r\n platform: string;\r\n arch: string;\r\n release: string;\r\n type: string;\r\n endianness: string;\r\n cpus: number;\r\n}\r\n\r\ninterface BinaryInfo {\r\n name: string;\r\n path: string;\r\n exists: boolean;\r\n executable: boolean;\r\n}\r\n\r\nclass Arquitecture {\r\n private systemInfo: SystemInfo;\r\n\r\n constructor() {\r\n this.systemInfo = this.detectSystemInfo();\r\n }\r\n\r\n /**\r\n * Detecta información completa del sistema\r\n */\r\n private detectSystemInfo(): SystemInfo {\r\n return {\r\n platform: os.platform(),\r\n arch: os.arch(),\r\n release: os.release(),\r\n type: os.type(),\r\n endianness: os.endianness(),\r\n cpus: os.cpus().length\r\n };\r\n }\r\n\r\n /**\r\n * Obtiene la plataforma normalizada\r\n */\r\n getPlatform(): string {\r\n const platform = this.systemInfo.platform;\r\n \r\n switch (platform) {\r\n case 'win32':\r\n return 'windows';\r\n case 'darwin':\r\n return 'macos';\r\n case 'linux':\r\n return 'linux';\r\n case 'freebsd':\r\n return 'freebsd';\r\n case 'openbsd':\r\n return 'openbsd';\r\n case 'sunos':\r\n return 'solaris';\r\n default:\r\n return platform;\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene la arquitectura normalizada\r\n */\r\n getArchitecture(): string {\r\n const arch = this.systemInfo.arch;\r\n \r\n switch (arch) {\r\n case 'x64':\r\n return 'x86_64';\r\n case 'x32':\r\n case 'ia32':\r\n return 'i686';\r\n case 'arm64':\r\n return 'aarch64';\r\n case 'arm':\r\n return 'armv7';\r\n case 'ppc64':\r\n return 'powerpc64';\r\n case 'ppc':\r\n return 'powerpc';\r\n case 's390x':\r\n return 's390x';\r\n case 'mips':\r\n return 'mips';\r\n case 'mipsel':\r\n return 'mipsel';\r\n default:\r\n return arch;\r\n }\r\n }\r\n\r\n /**\r\n * Genera el nombre del binario basado en la arquitectura\r\n */\r\n getBinaryName(baseName: string): string {\r\n const platform = this.getPlatform();\r\n const arch = this.getArchitecture();\r\n const extension = platform === 'windows' ? '.exe' : '';\r\n \r\n return `${baseName}-${platform}-${arch}${extension}`;\r\n }\r\n\r\n /**\r\n * Obtiene información completa del sistema\r\n */\r\n getSystemInfo(): SystemInfo {\r\n return { ...this.systemInfo };\r\n }\r\n\r\n /**\r\n * Obtiene el triple de destino (target triple) para Rust\r\n */\r\n getRustTargetTriple(): string {\r\n const platform = this.getPlatform();\r\n const arch = this.getArchitecture();\r\n \r\n // Mapeo de plataformas y arquitecturas a target triples de Rust\r\n const targetMap: { [key: string]: string } = {\r\n 'linux-x86_64': 'x86_64-unknown-linux-gnu',\r\n 'linux-i686': 'i686-unknown-linux-gnu',\r\n 'linux-aarch64': 'aarch64-unknown-linux-gnu',\r\n 'linux-armv7': 'armv7-unknown-linux-gnueabihf',\r\n 'macos-x86_64': 'x86_64-apple-darwin',\r\n 'macos-aarch64': 'aarch64-apple-darwin',\r\n 'windows-x86_64': 'x86_64-pc-windows-msvc',\r\n 'windows-i686': 'i686-pc-windows-msvc',\r\n 'windows-aarch64': 'aarch64-pc-windows-msvc',\r\n 'freebsd-x86_64': 'x86_64-unknown-freebsd',\r\n };\r\n \r\n const key = `${platform}-${arch}`;\r\n return targetMap[key] || `${arch}-unknown-${platform}`;\r\n }\r\n\r\n /**\r\n * Muestra información detallada del sistema\r\n */\r\n printSystemInfo(): void {\r\n console.log('🖥️ System Information:');\r\n console.log('├─ Platform:', this.getPlatform());\r\n console.log('├─ Arquitecture:', this.getArchitecture());\r\n console.log('├─ OS Type:', this.systemInfo.type);\r\n console.log('├─ OS Release:', this.systemInfo.release);\r\n console.log('├─ Endianness:', this.systemInfo.endianness);\r\n console.log('├─ CPUs:', this.systemInfo.cpus);\r\n console.log('└─ Rust Target:', this.getRustTargetTriple());\r\n }\r\n}\r\n\r\nexport { \r\n Arquitecture, \r\n SystemInfo,\r\n BinaryInfo\r\n};","import { BinaryType } from \"../@types/Binary\";\r\nimport { Arquitecture } from \"./Arquitecture\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport * as os from \"os\";\r\nimport { https } from 'follow-redirects';\r\nimport * as unzipper from \"unzipper\";\r\nimport { IncomingMessage } from 'http';\r\nimport ora from \"ora\";\r\nimport chalk from \"chalk\";\r\n\r\ninterface DownloadProgress {\r\n downloaded: number;\r\n total: number;\r\n percentage: number;\r\n}\r\n\r\nclass Downloader {\r\n private static mainSpinner: any = null;\r\n private static currentSpinner: any = null;\r\n\r\n static get(prefix: string): BinaryType & { name: string; url: string } {\r\n const arch = new Arquitecture();\r\n const platform = arch.getPlatform();\r\n const architecture = arch.getArchitecture();\r\n\r\n const platformMap: Record<string, string> = {\r\n windows: \"windows\",\r\n linux: \"linux\",\r\n darwin: \"macos\"\r\n };\r\n\r\n const archMap: Record<string, string> = {\r\n x86_64: \"x64\",\r\n aarch64: \"arm64\"\r\n };\r\n\r\n const plat = platformMap[platform];\r\n const archSuffix = archMap[architecture];\r\n\r\n if (plat && archSuffix) {\r\n const baseName = `${prefix}-engine-${plat}-${archSuffix}`;\r\n const binaryName = platform === \"windows\" ? `${baseName}.exe` : baseName;\r\n\r\n const url = `https://github.com/Dbcube/binaries/releases/download/${prefix}-engine/${prefix}-engine-latest-${plat}-${archSuffix}.zip`;\r\n return {\r\n name: binaryName,\r\n url,\r\n query_engine: binaryName,\r\n schema_engine: `${prefix}-engine-${plat}-${archSuffix}${platform === \"windows\" ? \".exe\" : \"\"}`\r\n };\r\n }\r\n\r\n return {\r\n name: \"\",\r\n url: \"\",\r\n query_engine: \"\",\r\n schema_engine: \"\"\r\n };\r\n }\r\n\r\n static async download(targetDir?: string): Promise<void> {\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n const binDir = targetDir || this.getDefaultBinDir();\r\n fs.mkdirSync(binDir, { recursive: true });\r\n\r\n // Initialize main spinner\r\n this.mainSpinner = ora({\r\n text: chalk.blue('Descargando binarios necesarios...'),\r\n spinner: 'dots12'\r\n }).start();\r\n\r\n // Check which binaries need to be downloaded\r\n const binariesToDownload = [];\r\n let existingCount = 0;\r\n\r\n for (const prefix of binaries) {\r\n const binaryInfo = this.get(prefix);\r\n if (!binaryInfo.name || !binaryInfo.url) {\r\n throw new Error(`Plataforma o arquitectura no soportada para ${prefix}`);\r\n }\r\n\r\n const finalBinaryPath = path.join(binDir, binaryInfo.name);\r\n if (fs.existsSync(finalBinaryPath)) {\r\n existingCount++;\r\n continue;\r\n }\r\n\r\n binariesToDownload.push({\r\n prefix,\r\n binaryInfo,\r\n tempZipPath: path.join(os.tmpdir(), `dbcube-${prefix}-${Date.now()}.zip`),\r\n finalBinaryPath\r\n });\r\n }\r\n\r\n if (binariesToDownload.length === 0) {\r\n this.mainSpinner.succeed(chalk.green('Todos los binarios ya están descargados'));\r\n return;\r\n }\r\n\r\n // Show initial progress\r\n this.updateMainProgress('paralelo', existingCount, binaries.length, 'downloading');\r\n\r\n try {\r\n // Download all binaries in parallel\r\n await Promise.all(binariesToDownload.map(async (binary, index) => {\r\n const maxRetries = 3;\r\n let attempt = 0;\r\n\r\n while (attempt <= maxRetries) {\r\n try {\r\n // Download\r\n await this.downloadFileWithProgress(binary.binaryInfo.url, binary.tempZipPath, binary.prefix);\r\n\r\n // Extract\r\n await this.extractBinary(binary.tempZipPath, binary.finalBinaryPath, binary.prefix);\r\n\r\n // Update progress\r\n const completed = existingCount + index + 1;\r\n this.updateMainProgress(binary.prefix, completed, binaries.length, 'completed');\r\n break;\r\n\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n\r\n if (attempt < maxRetries && (\r\n errorMessage.includes('ECONNRESET') ||\r\n errorMessage.includes('timeout') ||\r\n errorMessage.includes('ETIMEDOUT') ||\r\n errorMessage.includes('ENOTFOUND')\r\n )) {\r\n attempt++;\r\n this.updateMainProgress(binary.prefix, existingCount, binaries.length, 'retrying', attempt);\r\n await new Promise(resolve => setTimeout(resolve, 1000 + Math.random() * 1000)); // Random delay to avoid conflicts\r\n } else {\r\n throw new Error(`Error descargando ${binary.prefix}: ${errorMessage}`);\r\n }\r\n }\r\n }\r\n }));\r\n\r\n // Complete successfully\r\n this.mainSpinner.succeed(chalk.green('Binarios descargados correctamente'));\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n this.mainSpinner.fail(chalk.red(`Error en descarga paralela: ${errorMessage}`));\r\n throw error;\r\n }\r\n }\r\n\r\n private static updateMainProgress(binary: string, current: number, total: number, status: string, attempt?: number) {\r\n const progressBar = this.createProgressBar(current, total);\r\n const statusEmojis = {\r\n downloading: '📥',\r\n extracting: '📦',\r\n completed: '✅',\r\n exists: '✅',\r\n retrying: '🔄'\r\n };\r\n\r\n const statusMessages = {\r\n downloading: chalk.blue('descargando'),\r\n extracting: chalk.yellow('extrayendo'),\r\n completed: chalk.green('completado'),\r\n exists: chalk.gray('existe'),\r\n retrying: chalk.yellow(`reintentando (${attempt}/${3})`)\r\n };\r\n\r\n const emoji = statusEmojis[status as keyof typeof statusEmojis] || '📥';\r\n const message = statusMessages[status as keyof typeof statusMessages] || status;\r\n\r\n this.mainSpinner.text = `${progressBar} ${emoji} ${chalk.bold(binary)} - ${message}`;\r\n }\r\n\r\n private static createProgressBar(current: number, total: number, width: number = 20): string {\r\n const filled = Math.round((current / total) * width);\r\n const empty = width - filled;\r\n const filledBar = chalk.green('█'.repeat(filled));\r\n const emptyBar = chalk.gray('░'.repeat(empty));\r\n const percentage = chalk.bold(`${current}/${total}`);\r\n return `[${filledBar}${emptyBar}] ${percentage}`;\r\n }\r\n\r\n private static downloadFileWithProgress(url: string, outputPath: string, prefix: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const request = https.get(url, { timeout: 0 }, (response: IncomingMessage) => {\r\n if (response.statusCode === 302 || response.statusCode === 301) {\r\n const redirectUrl = response.headers.location;\r\n if (redirectUrl) {\r\n return this.downloadFileWithProgress(redirectUrl, outputPath, prefix).then(resolve).catch(reject);\r\n }\r\n }\r\n\r\n if (response.statusCode !== 200) {\r\n reject(new Error(`HTTP ${response.statusCode} para ${prefix}`));\r\n return;\r\n }\r\n\r\n const file = fs.createWriteStream(outputPath);\r\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\r\n let downloadedBytes = 0;\r\n\r\n response.on('data', (chunk) => {\r\n downloadedBytes += chunk.length;\r\n file.write(chunk);\r\n\r\n if (totalBytes > 0) {\r\n const progress: DownloadProgress = {\r\n downloaded: downloadedBytes,\r\n total: totalBytes,\r\n percentage: (downloadedBytes / totalBytes) * 100\r\n };\r\n this.updateDownloadProgress(prefix, progress);\r\n }\r\n });\r\n\r\n response.on('end', () => {\r\n file.end();\r\n resolve();\r\n });\r\n\r\n response.on('error', (err) => {\r\n file.close();\r\n this.cleanupFile(outputPath);\r\n reject(err);\r\n });\r\n\r\n file.on('error', (err) => {\r\n file.close();\r\n this.cleanupFile(outputPath);\r\n reject(err);\r\n });\r\n });\r\n\r\n request.on('error', reject);\r\n request.on('timeout', () => {\r\n request.destroy();\r\n reject(new Error(`Timeout descargando ${prefix}`));\r\n });\r\n });\r\n }\r\n\r\n private static updateDownloadProgress(binary: string, progress: DownloadProgress) {\r\n const percentage = progress.percentage.toFixed(1);\r\n const downloaded = (progress.downloaded / 1024 / 1024).toFixed(1);\r\n const total = (progress.total / 1024 / 1024).toFixed(1);\r\n\r\n // Create a mini progress bar for the binary\r\n const barWidth = 15;\r\n const filled = Math.round((progress.percentage / 100) * barWidth);\r\n const empty = barWidth - filled;\r\n const progressBar = chalk.green('█'.repeat(filled)) + chalk.gray('░'.repeat(empty));\r\n\r\n const progressText = `[${progressBar}] ${percentage}% (${downloaded}/${total}MB)`;\r\n this.mainSpinner.text = `📥 ${chalk.bold(binary)} - ${progressText}`;\r\n }\r\n\r\n private static extractBinary(zipPath: string, outputPath: string, prefix: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n let extracted = false;\r\n\r\n fs.createReadStream(zipPath)\r\n .pipe(unzipper.Parse())\r\n .on('entry', (entry: unzipper.Entry) => {\r\n if (entry.type === 'File' && !extracted) {\r\n extracted = true;\r\n const writeStream = fs.createWriteStream(outputPath);\r\n\r\n entry.pipe(writeStream);\r\n\r\n writeStream.on('finish', () => {\r\n if (process.platform !== 'win32') {\r\n fs.chmodSync(outputPath, 0o755);\r\n }\r\n this.cleanupFile(zipPath);\r\n resolve();\r\n });\r\n\r\n writeStream.on('error', (err: Error) => {\r\n this.cleanupFile(zipPath);\r\n reject(err);\r\n });\r\n } else {\r\n entry.autodrain();\r\n }\r\n })\r\n .on('error', (err: Error) => {\r\n this.cleanupFile(zipPath);\r\n reject(err);\r\n })\r\n .on('close', () => {\r\n if (!extracted) {\r\n this.cleanupFile(zipPath);\r\n reject(new Error(`No se encontró archivo válido en el ZIP para ${prefix}`));\r\n }\r\n });\r\n });\r\n }\r\n\r\n private static cleanupFile(filePath: string): void {\r\n try {\r\n if (fs.existsSync(filePath)) {\r\n fs.unlinkSync(filePath);\r\n }\r\n } catch {\r\n // Ignore cleanup errors\r\n }\r\n }\r\n\r\n private static getDefaultBinDir(): string {\r\n // Try to find a suitable directory for binaries in order of preference\r\n const possibleDirs = [\r\n path.resolve(process.cwd(), '.dbcube', 'bin'),\r\n path.resolve(process.cwd(), 'node_modules', '.dbcube', 'bin'),\r\n path.resolve(__dirname, '..', 'bin'),\r\n ];\r\n\r\n // Use the first one that can be created or already exists\r\n for (const dir of possibleDirs) {\r\n try {\r\n if (!fs.existsSync(dir)) {\r\n fs.mkdirSync(dir, { recursive: true });\r\n }\r\n // Test write permissions\r\n const testFile = path.join(dir, '.test');\r\n fs.writeFileSync(testFile, 'test');\r\n fs.unlinkSync(testFile);\r\n return dir;\r\n } catch {\r\n // Try next directory\r\n continue;\r\n }\r\n }\r\n\r\n // Fallback to .dbcube directory in temp\r\n const tempDir = path.join(os.tmpdir(), '.dbcube', 'bin');\r\n fs.mkdirSync(tempDir, { recursive: true });\r\n return tempDir;\r\n }\r\n}\r\n\r\nexport { Downloader };","#!/usr/bin/env node\r\n\r\nimport { Downloader } from \"./lib/Donwloader\";\r\n\r\n/**\r\n * Script CLI para descargar binarios manualmente\r\n */\r\nasync function main() {\r\n const args = process.argv.slice(2);\r\n const command = args[0];\r\n\r\n switch (command) {\r\n case 'install':\r\n case 'download':\r\n console.log('🚀 Iniciando descarga de binarios DBCube...');\r\n try {\r\n await Downloader.download();\r\n console.log('✅ ¡Todos los binarios descargados exitosamente!');\r\n } catch (error) {\r\n console.error('❌ Error descargando binarios:', error);\r\n }\r\n break;\r\n\r\n case 'check':\r\n console.log('🔍 Verificando binarios...');\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n for (const prefix of binaries) {\r\n const binary = Downloader.get(prefix);\r\n console.log(`${prefix}-engine: ${binary.name}`);\r\n console.log(` URL: ${binary.url}`);\r\n }\r\n break;\r\n\r\n default:\r\n console.log('DBCube Binary Manager');\r\n console.log('');\r\n console.log('Comandos disponibles:');\r\n console.log(' install|download - Descargar todos los binarios');\r\n console.log(' check - Verificar información de binarios');\r\n console.log('');\r\n console.log('Uso:');\r\n console.log(' npx @dbcube/core install');\r\n console.log(' npx @dbcube/core check');\r\n }\r\n}\r\n\r\nmain().catch(error => {\r\n console.error('Error:', error);\r\n});"],"mappings":";;;AAAA,YAAY,QAAQ;AAoBpB,IAAM,eAAN,MAAmB;AAAA,EACP;AAAA,EAER,cAAc;AACV,SAAK,aAAa,KAAK,iBAAiB;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAA+B;AACnC,WAAO;AAAA,MACH,UAAa,YAAS;AAAA,MACtB,MAAS,QAAK;AAAA,MACd,SAAY,WAAQ;AAAA,MACpB,MAAS,QAAK;AAAA,MACd,YAAe,cAAW;AAAA,MAC1B,MAAS,QAAK,EAAE;AAAA,IACpB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,cAAsB;AAClB,UAAMA,YAAW,KAAK,WAAW;AAEjC,YAAQA,WAAU;AAAA,MACd,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAOA;AAAA,IACf;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,kBAA0B;AACtB,UAAMC,QAAO,KAAK,WAAW;AAE7B,YAAQA,OAAM;AAAA,MACV,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AAAA,MACL,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAOA;AAAA,IACf;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,UAA0B;AACpC,UAAMD,YAAW,KAAK,YAAY;AAClC,UAAMC,QAAO,KAAK,gBAAgB;AAClC,UAAM,YAAYD,cAAa,YAAY,SAAS;AAEpD,WAAO,GAAG,QAAQ,IAAIA,SAAQ,IAAIC,KAAI,GAAG,SAAS;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,gBAA4B;AACxB,WAAO,EAAE,GAAG,KAAK,WAAW;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,sBAA8B;AAC1B,UAAMD,YAAW,KAAK,YAAY;AAClC,UAAMC,QAAO,KAAK,gBAAgB;AAGlC,UAAM,YAAuC;AAAA,MACzC,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,IACtB;AAEA,UAAM,MAAM,GAAGD,SAAQ,IAAIC,KAAI;AAC/B,WAAO,UAAU,GAAG,KAAK,GAAGA,KAAI,YAAYD,SAAQ;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAwB;AACpB,YAAQ,IAAI,sCAA0B;AACtC,YAAQ,IAAI,0BAAgB,KAAK,YAAY,CAAC;AAC9C,YAAQ,IAAI,8BAAoB,KAAK,gBAAgB,CAAC;AACtD,YAAQ,IAAI,yBAAe,KAAK,WAAW,IAAI;AAC/C,YAAQ,IAAI,4BAAkB,KAAK,WAAW,OAAO;AACrD,YAAQ,IAAI,4BAAkB,KAAK,WAAW,UAAU;AACxD,YAAQ,IAAI,sBAAY,KAAK,WAAW,IAAI;AAC5C,YAAQ,IAAI,6BAAmB,KAAK,oBAAoB,CAAC;AAAA,EAC7D;AACJ;;;ACtJA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAYE,SAAQ;AACpB,SAAS,aAAa;AACtB,YAAY,cAAc;AAE1B,OAAO,SAAS;AAChB,OAAO,WAAW;AAQlB,IAAM,aAAN,MAAiB;AAAA,EACb,OAAe,cAAmB;AAAA,EAClC,OAAe,iBAAsB;AAAA,EAErC,OAAO,IAAI,QAA4D;AACnE,UAAMC,QAAO,IAAI,aAAa;AAC9B,UAAMC,YAAWD,MAAK,YAAY;AAClC,UAAM,eAAeA,MAAK,gBAAgB;AAE1C,UAAM,cAAsC;AAAA,MACxC,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,IACZ;AAEA,UAAM,UAAkC;AAAA,MACpC,QAAQ;AAAA,MACR,SAAS;AAAA,IACb;AAEA,UAAM,OAAO,YAAYC,SAAQ;AACjC,UAAM,aAAa,QAAQ,YAAY;AAEvC,QAAI,QAAQ,YAAY;AACpB,YAAM,WAAW,GAAG,MAAM,WAAW,IAAI,IAAI,UAAU;AACvD,YAAM,aAAaA,cAAa,YAAY,GAAG,QAAQ,SAAS;AAEhE,YAAM,MAAM,wDAAwD,MAAM,WAAW,MAAM,kBAAkB,IAAI,IAAI,UAAU;AAC/H,aAAO;AAAA,QACH,MAAM;AAAA,QACN;AAAA,QACA,cAAc;AAAA,QACd,eAAe,GAAG,MAAM,WAAW,IAAI,IAAI,UAAU,GAAGA,cAAa,YAAY,SAAS,EAAE;AAAA,MAChG;AAAA,IACJ;AAEA,WAAO;AAAA,MACH,MAAM;AAAA,MACN,KAAK;AAAA,MACL,cAAc;AAAA,MACd,eAAe;AAAA,IACnB;AAAA,EACJ;AAAA,EAEA,aAAa,SAAS,WAAmC;AACrD,UAAM,WAAW,CAAC,UAAU,SAAS,QAAQ;AAC7C,UAAM,SAAS,aAAa,KAAK,iBAAiB;AAClD,IAAG,aAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AAGxC,SAAK,cAAc,IAAI;AAAA,MACnB,MAAM,MAAM,KAAK,oCAAoC;AAAA,MACrD,SAAS;AAAA,IACb,CAAC,EAAE,MAAM;AAGT,UAAM,qBAAqB,CAAC;AAC5B,QAAI,gBAAgB;AAEpB,eAAW,UAAU,UAAU;AAC3B,YAAM,aAAa,KAAK,IAAI,MAAM;AAClC,UAAI,CAAC,WAAW,QAAQ,CAAC,WAAW,KAAK;AACrC,cAAM,IAAI,MAAM,+CAA+C,MAAM,EAAE;AAAA,MAC3E;AAEA,YAAM,kBAAuB,UAAK,QAAQ,WAAW,IAAI;AACzD,UAAO,cAAW,eAAe,GAAG;AAChC;AACA;AAAA,MACJ;AAEA,yBAAmB,KAAK;AAAA,QACpB;AAAA,QACA;AAAA,QACA,aAAkB,UAAQ,WAAO,GAAG,UAAU,MAAM,IAAI,KAAK,IAAI,CAAC,MAAM;AAAA,QACxE;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,QAAI,mBAAmB,WAAW,GAAG;AACjC,WAAK,YAAY,QAAQ,MAAM,MAAM,4CAAyC,CAAC;AAC/E;AAAA,IACJ;AAGA,SAAK,mBAAmB,YAAY,eAAe,SAAS,QAAQ,aAAa;AAEjF,QAAI;AAEA,YAAM,QAAQ,IAAI,mBAAmB,IAAI,OAAO,QAAQ,UAAU;AAC9D,cAAM,aAAa;AACnB,YAAI,UAAU;AAEd,eAAO,WAAW,YAAY;AAC1B,cAAI;AAEA,kBAAM,KAAK,yBAAyB,OAAO,WAAW,KAAK,OAAO,aAAa,OAAO,MAAM;AAG5F,kBAAM,KAAK,cAAc,OAAO,aAAa,OAAO,iBAAiB,OAAO,MAAM;AAGlF,kBAAM,YAAY,gBAAgB,QAAQ;AAC1C,iBAAK,mBAAmB,OAAO,QAAQ,WAAW,SAAS,QAAQ,WAAW;AAC9E;AAAA,UAEJ,SAAS,OAAgB;AACrB,kBAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAE9D,gBAAI,UAAU,eACV,aAAa,SAAS,YAAY,KAClC,aAAa,SAAS,SAAS,KAC/B,aAAa,SAAS,WAAW,KACjC,aAAa,SAAS,WAAW,IAClC;AACC;AACA,mBAAK,mBAAmB,OAAO,QAAQ,eAAe,SAAS,QAAQ,YAAY,OAAO;AAC1F,oBAAM,IAAI,QAAQ,CAAAC,aAAW,WAAWA,UAAS,MAAO,KAAK,OAAO,IAAI,GAAI,CAAC;AAAA,YACjF,OAAO;AACH,oBAAM,IAAI,MAAM,qBAAqB,OAAO,MAAM,KAAK,YAAY,EAAE;AAAA,YACzE;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,CAAC,CAAC;AAGF,WAAK,YAAY,QAAQ,MAAM,MAAM,oCAAoC,CAAC;AAAA,IAC9E,SAAS,OAAgB;AACrB,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAC9D,WAAK,YAAY,KAAK,MAAM,IAAI,+BAA+B,YAAY,EAAE,CAAC;AAC9E,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,OAAe,mBAAmB,QAAgB,SAAiB,OAAe,QAAgB,SAAkB;AAChH,UAAM,cAAc,KAAK,kBAAkB,SAAS,KAAK;AACzD,UAAM,eAAe;AAAA,MACjB,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAEA,UAAM,iBAAiB;AAAA,MACnB,aAAa,MAAM,KAAK,aAAa;AAAA,MACrC,YAAY,MAAM,OAAO,YAAY;AAAA,MACrC,WAAW,MAAM,MAAM,YAAY;AAAA,MACnC,QAAQ,MAAM,KAAK,QAAQ;AAAA,MAC3B,UAAU,MAAM,OAAO,iBAAiB,OAAO,IAAI,CAAC,GAAG;AAAA,IAC3D;AAEA,UAAM,QAAQ,aAAa,MAAmC,KAAK;AACnE,UAAM,UAAU,eAAe,MAAqC,KAAK;AAEzE,SAAK,YAAY,OAAO,GAAG,WAAW,IAAI,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,OAAO;AAAA,EACtF;AAAA,EAEA,OAAe,kBAAkB,SAAiB,OAAe,QAAgB,IAAY;AACzF,UAAM,SAAS,KAAK,MAAO,UAAU,QAAS,KAAK;AACnD,UAAM,QAAQ,QAAQ;AACtB,UAAM,YAAY,MAAM,MAAM,SAAI,OAAO,MAAM,CAAC;AAChD,UAAM,WAAW,MAAM,KAAK,SAAI,OAAO,KAAK,CAAC;AAC7C,UAAM,aAAa,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,EAAE;AACnD,WAAO,IAAI,SAAS,GAAG,QAAQ,KAAK,UAAU;AAAA,EAClD;AAAA,EAEA,OAAe,yBAAyB,KAAa,YAAoB,QAA+B;AACpG,WAAO,IAAI,QAAQ,CAACA,UAAS,WAAW;AACpC,YAAM,UAAU,MAAM,IAAI,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,aAA8B;AAC1E,YAAI,SAAS,eAAe,OAAO,SAAS,eAAe,KAAK;AAC5D,gBAAM,cAAc,SAAS,QAAQ;AACrC,cAAI,aAAa;AACb,mBAAO,KAAK,yBAAyB,aAAa,YAAY,MAAM,EAAE,KAAKA,QAAO,EAAE,MAAM,MAAM;AAAA,UACpG;AAAA,QACJ;AAEA,YAAI,SAAS,eAAe,KAAK;AAC7B,iBAAO,IAAI,MAAM,QAAQ,SAAS,UAAU,SAAS,MAAM,EAAE,CAAC;AAC9D;AAAA,QACJ;AAEA,cAAM,OAAU,qBAAkB,UAAU;AAC5C,cAAM,aAAa,SAAS,SAAS,QAAQ,gBAAgB,KAAK,KAAK,EAAE;AACzE,YAAI,kBAAkB;AAEtB,iBAAS,GAAG,QAAQ,CAAC,UAAU;AAC3B,6BAAmB,MAAM;AACzB,eAAK,MAAM,KAAK;AAEhB,cAAI,aAAa,GAAG;AAChB,kBAAM,WAA6B;AAAA,cAC/B,YAAY;AAAA,cACZ,OAAO;AAAA,cACP,YAAa,kBAAkB,aAAc;AAAA,YACjD;AACA,iBAAK,uBAAuB,QAAQ,QAAQ;AAAA,UAChD;AAAA,QACJ,CAAC;AAED,iBAAS,GAAG,OAAO,MAAM;AACrB,eAAK,IAAI;AACT,UAAAA,SAAQ;AAAA,QACZ,CAAC;AAED,iBAAS,GAAG,SAAS,CAAC,QAAQ;AAC1B,eAAK,MAAM;AACX,eAAK,YAAY,UAAU;AAC3B,iBAAO,GAAG;AAAA,QACd,CAAC;AAED,aAAK,GAAG,SAAS,CAAC,QAAQ;AACtB,eAAK,MAAM;AACX,eAAK,YAAY,UAAU;AAC3B,iBAAO,GAAG;AAAA,QACd,CAAC;AAAA,MACL,CAAC;AAED,cAAQ,GAAG,SAAS,MAAM;AAC1B,cAAQ,GAAG,WAAW,MAAM;AACxB,gBAAQ,QAAQ;AAChB,eAAO,IAAI,MAAM,uBAAuB,MAAM,EAAE,CAAC;AAAA,MACrD,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAAA,EAEA,OAAe,uBAAuB,QAAgB,UAA4B;AAC9E,UAAM,aAAa,SAAS,WAAW,QAAQ,CAAC;AAChD,UAAM,cAAc,SAAS,aAAa,OAAO,MAAM,QAAQ,CAAC;AAChE,UAAM,SAAS,SAAS,QAAQ,OAAO,MAAM,QAAQ,CAAC;AAGtD,UAAM,WAAW;AACjB,UAAM,SAAS,KAAK,MAAO,SAAS,aAAa,MAAO,QAAQ;AAChE,UAAM,QAAQ,WAAW;AACzB,UAAM,cAAc,MAAM,MAAM,SAAI,OAAO,MAAM,CAAC,IAAI,MAAM,KAAK,SAAI,OAAO,KAAK,CAAC;AAElF,UAAM,eAAe,IAAI,WAAW,KAAK,UAAU,MAAM,UAAU,IAAI,KAAK;AAC5E,SAAK,YAAY,OAAO,aAAM,MAAM,KAAK,MAAM,CAAC,MAAM,YAAY;AAAA,EACtE;AAAA,EAEA,OAAe,cAAc,SAAiB,YAAoB,QAA+B;AAC7F,WAAO,IAAI,QAAQ,CAACA,UAAS,WAAW;AACpC,UAAI,YAAY;AAEhB,MAAG,oBAAiB,OAAO,EACtB,KAAc,eAAM,CAAC,EACrB,GAAG,SAAS,CAAC,UAA0B;AACpC,YAAI,MAAM,SAAS,UAAU,CAAC,WAAW;AACrC,sBAAY;AACZ,gBAAM,cAAiB,qBAAkB,UAAU;AAEnD,gBAAM,KAAK,WAAW;AAEtB,sBAAY,GAAG,UAAU,MAAM;AAC3B,gBAAI,QAAQ,aAAa,SAAS;AAC9B,cAAG,aAAU,YAAY,GAAK;AAAA,YAClC;AACA,iBAAK,YAAY,OAAO;AACxB,YAAAA,SAAQ;AAAA,UACZ,CAAC;AAED,sBAAY,GAAG,SAAS,CAAC,QAAe;AACpC,iBAAK,YAAY,OAAO;AACxB,mBAAO,GAAG;AAAA,UACd,CAAC;AAAA,QACL,OAAO;AACH,gBAAM,UAAU;AAAA,QACpB;AAAA,MACJ,CAAC,EACA,GAAG,SAAS,CAAC,QAAe;AACzB,aAAK,YAAY,OAAO;AACxB,eAAO,GAAG;AAAA,MACd,CAAC,EACA,GAAG,SAAS,MAAM;AACf,YAAI,CAAC,WAAW;AACZ,eAAK,YAAY,OAAO;AACxB,iBAAO,IAAI,MAAM,sDAAgD,MAAM,EAAE,CAAC;AAAA,QAC9E;AAAA,MACJ,CAAC;AAAA,IACT,CAAC;AAAA,EACL;AAAA,EAEA,OAAe,YAAY,UAAwB;AAC/C,QAAI;AACA,UAAO,cAAW,QAAQ,GAAG;AACzB,QAAG,cAAW,QAAQ;AAAA,MAC1B;AAAA,IACJ,QAAQ;AAAA,IAER;AAAA,EACJ;AAAA,EAEA,OAAe,mBAA2B;AAEtC,UAAM,eAAe;AAAA,MACZ,aAAQ,QAAQ,IAAI,GAAG,WAAW,KAAK;AAAA,MACvC,aAAQ,QAAQ,IAAI,GAAG,gBAAgB,WAAW,KAAK;AAAA,MACvD,aAAQ,WAAW,MAAM,KAAK;AAAA,IACvC;AAGA,eAAW,OAAO,cAAc;AAC5B,UAAI;AACA,YAAI,CAAI,cAAW,GAAG,GAAG;AACrB,UAAG,aAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,QACzC;AAEA,cAAM,WAAgB,UAAK,KAAK,OAAO;AACvC,QAAG,iBAAc,UAAU,MAAM;AACjC,QAAG,cAAW,QAAQ;AACtB,eAAO;AAAA,MACX,QAAQ;AAEJ;AAAA,MACJ;AAAA,IACJ;AAGA,UAAM,UAAe,UAAQ,WAAO,GAAG,WAAW,KAAK;AACvD,IAAG,aAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AACzC,WAAO;AAAA,EACX;AACJ;;;AC7UA,eAAe,OAAO;AAClB,QAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,QAAM,UAAU,KAAK,CAAC;AAEtB,UAAQ,SAAS;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AACD,cAAQ,IAAI,oDAA6C;AACzD,UAAI;AACA,cAAM,WAAW,SAAS;AAC1B,gBAAQ,IAAI,yDAAiD;AAAA,MACjE,SAAS,OAAO;AACZ,gBAAQ,MAAM,sCAAiC,KAAK;AAAA,MACxD;AACA;AAAA,IAEJ,KAAK;AACD,cAAQ,IAAI,mCAA4B;AACxC,YAAM,WAAW,CAAC,UAAU,SAAS,QAAQ;AAC7C,iBAAW,UAAU,UAAU;AAC3B,cAAM,SAAS,WAAW,IAAI,MAAM;AACpC,gBAAQ,IAAI,GAAG,MAAM,YAAY,OAAO,IAAI,EAAE;AAC9C,gBAAQ,IAAI,UAAU,OAAO,GAAG,EAAE;AAAA,MACtC;AACA;AAAA,IAEJ;AACI,cAAQ,IAAI,uBAAuB;AACnC,cAAQ,IAAI,EAAE;AACd,cAAQ,IAAI,uBAAuB;AACnC,cAAQ,IAAI,oDAAoD;AAChE,cAAQ,IAAI,2DAAwD;AACpE,cAAQ,IAAI,EAAE;AACd,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,4BAA4B;AACxC,cAAQ,IAAI,0BAA0B;AAAA,EAC9C;AACJ;AAEA,KAAK,EAAE,MAAM,WAAS;AAClB,UAAQ,MAAM,UAAU,KAAK;AACjC,CAAC;","names":["platform","arch","os","arch","platform","resolve"]}
1
+ {"version":3,"sources":["../src/lib/Arquitecture.ts","../src/lib/Donwloader.ts","../src/bin.ts"],"sourcesContent":["import * as os from 'os';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\n\r\ninterface SystemInfo {\r\n platform: string;\r\n arch: string;\r\n release: string;\r\n type: string;\r\n endianness: string;\r\n cpus: number;\r\n}\r\n\r\ninterface BinaryInfo {\r\n name: string;\r\n path: string;\r\n exists: boolean;\r\n executable: boolean;\r\n}\r\n\r\nclass Arquitecture {\r\n private systemInfo: SystemInfo;\r\n\r\n constructor() {\r\n this.systemInfo = this.detectSystemInfo();\r\n }\r\n\r\n /**\r\n * Detecta información completa del sistema\r\n */\r\n private detectSystemInfo(): SystemInfo {\r\n return {\r\n platform: os.platform(),\r\n arch: os.arch(),\r\n release: os.release(),\r\n type: os.type(),\r\n endianness: os.endianness(),\r\n cpus: os.cpus().length\r\n };\r\n }\r\n\r\n /**\r\n * Obtiene la plataforma normalizada\r\n */\r\n getPlatform(): string {\r\n const platform = this.systemInfo.platform;\r\n \r\n switch (platform) {\r\n case 'win32':\r\n return 'windows';\r\n case 'darwin':\r\n return 'macos';\r\n case 'linux':\r\n return 'linux';\r\n case 'freebsd':\r\n return 'freebsd';\r\n case 'openbsd':\r\n return 'openbsd';\r\n case 'sunos':\r\n return 'solaris';\r\n default:\r\n return platform;\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene la arquitectura normalizada\r\n */\r\n getArchitecture(): string {\r\n const arch = this.systemInfo.arch;\r\n \r\n switch (arch) {\r\n case 'x64':\r\n return 'x86_64';\r\n case 'x32':\r\n case 'ia32':\r\n return 'i686';\r\n case 'arm64':\r\n return 'aarch64';\r\n case 'arm':\r\n return 'armv7';\r\n case 'ppc64':\r\n return 'powerpc64';\r\n case 'ppc':\r\n return 'powerpc';\r\n case 's390x':\r\n return 's390x';\r\n case 'mips':\r\n return 'mips';\r\n case 'mipsel':\r\n return 'mipsel';\r\n default:\r\n return arch;\r\n }\r\n }\r\n\r\n /**\r\n * Genera el nombre del binario basado en la arquitectura\r\n */\r\n getBinaryName(baseName: string): string {\r\n const platform = this.getPlatform();\r\n const arch = this.getArchitecture();\r\n const extension = platform === 'windows' ? '.exe' : '';\r\n \r\n return `${baseName}-${platform}-${arch}${extension}`;\r\n }\r\n\r\n /**\r\n * Obtiene información completa del sistema\r\n */\r\n getSystemInfo(): SystemInfo {\r\n return { ...this.systemInfo };\r\n }\r\n\r\n /**\r\n * Obtiene el triple de destino (target triple) para Rust\r\n */\r\n getRustTargetTriple(): string {\r\n const platform = this.getPlatform();\r\n const arch = this.getArchitecture();\r\n \r\n // Mapeo de plataformas y arquitecturas a target triples de Rust\r\n const targetMap: { [key: string]: string } = {\r\n 'linux-x86_64': 'x86_64-unknown-linux-gnu',\r\n 'linux-i686': 'i686-unknown-linux-gnu',\r\n 'linux-aarch64': 'aarch64-unknown-linux-gnu',\r\n 'linux-armv7': 'armv7-unknown-linux-gnueabihf',\r\n 'macos-x86_64': 'x86_64-apple-darwin',\r\n 'macos-aarch64': 'aarch64-apple-darwin',\r\n 'windows-x86_64': 'x86_64-pc-windows-msvc',\r\n 'windows-i686': 'i686-pc-windows-msvc',\r\n 'windows-aarch64': 'aarch64-pc-windows-msvc',\r\n 'freebsd-x86_64': 'x86_64-unknown-freebsd',\r\n };\r\n \r\n const key = `${platform}-${arch}`;\r\n return targetMap[key] || `${arch}-unknown-${platform}`;\r\n }\r\n\r\n /**\r\n * Muestra información detallada del sistema\r\n */\r\n printSystemInfo(): void {\r\n console.log('🖥️ System Information:');\r\n console.log('├─ Platform:', this.getPlatform());\r\n console.log('├─ Arquitecture:', this.getArchitecture());\r\n console.log('├─ OS Type:', this.systemInfo.type);\r\n console.log('├─ OS Release:', this.systemInfo.release);\r\n console.log('├─ Endianness:', this.systemInfo.endianness);\r\n console.log('├─ CPUs:', this.systemInfo.cpus);\r\n console.log('└─ Rust Target:', this.getRustTargetTriple());\r\n }\r\n}\r\n\r\nexport { \r\n Arquitecture, \r\n SystemInfo,\r\n BinaryInfo\r\n};","import { BinaryType } from \"../@types/Binary\";\r\nimport { Arquitecture } from \"./Arquitecture\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport * as os from \"os\";\r\nimport followRedirects from 'follow-redirects';\r\nconst { https } = followRedirects;\r\nimport * as unzipper from \"unzipper\";\r\nimport { IncomingMessage } from 'http';\r\nimport ora from \"ora\";\r\nimport chalk from \"chalk\";\r\n\r\ninterface DownloadProgress {\r\n downloaded: number;\r\n total: number;\r\n percentage: number;\r\n}\r\n\r\nclass Downloader {\r\n private static mainSpinner: any = null;\r\n private static currentSpinner: any = null;\r\n\r\n static get(prefix: string): BinaryType & { name: string; url: string } {\r\n const arch = new Arquitecture();\r\n const platform = arch.getPlatform();\r\n const architecture = arch.getArchitecture();\r\n\r\n const platformMap: Record<string, string> = {\r\n windows: \"windows\",\r\n linux: \"linux\",\r\n darwin: \"macos\"\r\n };\r\n\r\n const archMap: Record<string, string> = {\r\n x86_64: \"x64\",\r\n aarch64: \"arm64\"\r\n };\r\n\r\n const plat = platformMap[platform];\r\n const archSuffix = archMap[architecture];\r\n\r\n if (plat && archSuffix) {\r\n const baseName = `${prefix}-engine-${plat}-${archSuffix}`;\r\n const binaryName = platform === \"windows\" ? `${baseName}.exe` : baseName;\r\n\r\n const url = `https://github.com/Dbcube/binaries/releases/download/${prefix}-engine/${prefix}-engine-latest-${plat}-${archSuffix}.zip`;\r\n return {\r\n name: binaryName,\r\n url,\r\n query_engine: binaryName,\r\n schema_engine: `${prefix}-engine-${plat}-${archSuffix}${platform === \"windows\" ? \".exe\" : \"\"}`\r\n };\r\n }\r\n\r\n return {\r\n name: \"\",\r\n url: \"\",\r\n query_engine: \"\",\r\n schema_engine: \"\"\r\n };\r\n }\r\n\r\n static async download(targetDir?: string): Promise<void> {\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n const binDir = targetDir || this.getDefaultBinDir();\r\n fs.mkdirSync(binDir, { recursive: true });\r\n\r\n // Initialize main spinner\r\n this.mainSpinner = ora({\r\n text: chalk.blue('Descargando binarios necesarios...'),\r\n spinner: 'dots12'\r\n }).start();\r\n\r\n // Check which binaries need to be downloaded\r\n const binariesToDownload = [];\r\n let existingCount = 0;\r\n\r\n for (const prefix of binaries) {\r\n const binaryInfo = this.get(prefix);\r\n if (!binaryInfo.name || !binaryInfo.url) {\r\n throw new Error(`Plataforma o arquitectura no soportada para ${prefix}`);\r\n }\r\n\r\n const finalBinaryPath = path.join(binDir, binaryInfo.name);\r\n if (fs.existsSync(finalBinaryPath)) {\r\n existingCount++;\r\n continue;\r\n }\r\n\r\n binariesToDownload.push({\r\n prefix,\r\n binaryInfo,\r\n tempZipPath: path.join(os.tmpdir(), `dbcube-${prefix}-${Date.now()}.zip`),\r\n finalBinaryPath\r\n });\r\n }\r\n\r\n if (binariesToDownload.length === 0) {\r\n this.mainSpinner.succeed(chalk.green('Todos los binarios ya están descargados'));\r\n return;\r\n }\r\n\r\n // Show initial progress\r\n this.updateMainProgress('paralelo', existingCount, binaries.length, 'downloading');\r\n\r\n try {\r\n // Download all binaries in parallel\r\n await Promise.all(binariesToDownload.map(async (binary, index) => {\r\n const maxRetries = 3;\r\n let attempt = 0;\r\n\r\n while (attempt <= maxRetries) {\r\n try {\r\n // Download\r\n await this.downloadFileWithProgress(binary.binaryInfo.url, binary.tempZipPath, binary.prefix);\r\n\r\n // Extract\r\n await this.extractBinary(binary.tempZipPath, binary.finalBinaryPath, binary.prefix);\r\n\r\n // Update progress\r\n const completed = existingCount + index + 1;\r\n this.updateMainProgress(binary.prefix, completed, binaries.length, 'completed');\r\n break;\r\n\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n\r\n if (attempt < maxRetries && (\r\n errorMessage.includes('ECONNRESET') ||\r\n errorMessage.includes('timeout') ||\r\n errorMessage.includes('ETIMEDOUT') ||\r\n errorMessage.includes('ENOTFOUND')\r\n )) {\r\n attempt++;\r\n this.updateMainProgress(binary.prefix, existingCount, binaries.length, 'retrying', attempt);\r\n await new Promise(resolve => setTimeout(resolve, 1000 + Math.random() * 1000)); // Random delay to avoid conflicts\r\n } else {\r\n throw new Error(`Error descargando ${binary.prefix}: ${errorMessage}`);\r\n }\r\n }\r\n }\r\n }));\r\n\r\n // Complete successfully\r\n this.mainSpinner.succeed(chalk.green('Binarios descargados correctamente'));\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n this.mainSpinner.fail(chalk.red(`Error en descarga paralela: ${errorMessage}`));\r\n throw error;\r\n }\r\n }\r\n\r\n private static updateMainProgress(binary: string, current: number, total: number, status: string, attempt?: number) {\r\n const progressBar = this.createProgressBar(current, total);\r\n const statusEmojis = {\r\n downloading: '📥',\r\n extracting: '📦',\r\n completed: '✅',\r\n exists: '✅',\r\n retrying: '🔄'\r\n };\r\n\r\n const statusMessages = {\r\n downloading: chalk.blue('descargando'),\r\n extracting: chalk.yellow('extrayendo'),\r\n completed: chalk.green('completado'),\r\n exists: chalk.gray('existe'),\r\n retrying: chalk.yellow(`reintentando (${attempt}/${3})`)\r\n };\r\n\r\n const emoji = statusEmojis[status as keyof typeof statusEmojis] || '📥';\r\n const message = statusMessages[status as keyof typeof statusMessages] || status;\r\n\r\n this.mainSpinner.text = `${progressBar} ${emoji} ${chalk.bold(binary)} - ${message}`;\r\n }\r\n\r\n private static createProgressBar(current: number, total: number, width: number = 20): string {\r\n const filled = Math.round((current / total) * width);\r\n const empty = width - filled;\r\n const filledBar = chalk.green('█'.repeat(filled));\r\n const emptyBar = chalk.gray('░'.repeat(empty));\r\n const percentage = chalk.bold(`${current}/${total}`);\r\n return `[${filledBar}${emptyBar}] ${percentage}`;\r\n }\r\n\r\n private static downloadFileWithProgress(url: string, outputPath: string, prefix: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const request = https.get(url, { timeout: 0 }, (response: IncomingMessage) => {\r\n if (response.statusCode === 302 || response.statusCode === 301) {\r\n const redirectUrl = response.headers.location;\r\n if (redirectUrl) {\r\n return this.downloadFileWithProgress(redirectUrl, outputPath, prefix).then(resolve).catch(reject);\r\n }\r\n }\r\n\r\n if (response.statusCode !== 200) {\r\n reject(new Error(`HTTP ${response.statusCode} para ${prefix}`));\r\n return;\r\n }\r\n\r\n const file = fs.createWriteStream(outputPath);\r\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\r\n let downloadedBytes = 0;\r\n\r\n response.on('data', (chunk) => {\r\n downloadedBytes += chunk.length;\r\n file.write(chunk);\r\n\r\n if (totalBytes > 0) {\r\n const progress: DownloadProgress = {\r\n downloaded: downloadedBytes,\r\n total: totalBytes,\r\n percentage: (downloadedBytes / totalBytes) * 100\r\n };\r\n this.updateDownloadProgress(prefix, progress);\r\n }\r\n });\r\n\r\n response.on('end', () => {\r\n file.end();\r\n resolve();\r\n });\r\n\r\n response.on('error', (err) => {\r\n file.close();\r\n this.cleanupFile(outputPath);\r\n reject(err);\r\n });\r\n\r\n file.on('error', (err) => {\r\n file.close();\r\n this.cleanupFile(outputPath);\r\n reject(err);\r\n });\r\n });\r\n\r\n request.on('error', reject);\r\n request.on('timeout', () => {\r\n request.destroy();\r\n reject(new Error(`Timeout descargando ${prefix}`));\r\n });\r\n });\r\n }\r\n\r\n private static updateDownloadProgress(binary: string, progress: DownloadProgress) {\r\n const percentage = progress.percentage.toFixed(1);\r\n const downloaded = (progress.downloaded / 1024 / 1024).toFixed(1);\r\n const total = (progress.total / 1024 / 1024).toFixed(1);\r\n\r\n // Create a mini progress bar for the binary\r\n const barWidth = 15;\r\n const filled = Math.round((progress.percentage / 100) * barWidth);\r\n const empty = barWidth - filled;\r\n const progressBar = chalk.green('█'.repeat(filled)) + chalk.gray('░'.repeat(empty));\r\n\r\n const progressText = `[${progressBar}] ${percentage}% (${downloaded}/${total}MB)`;\r\n this.mainSpinner.text = `📥 ${chalk.bold(binary)} - ${progressText}`;\r\n }\r\n\r\n private static extractBinary(zipPath: string, outputPath: string, prefix: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n let extracted = false;\r\n\r\n fs.createReadStream(zipPath)\r\n .pipe(unzipper.Parse())\r\n .on('entry', (entry: unzipper.Entry) => {\r\n if (entry.type === 'File' && !extracted) {\r\n extracted = true;\r\n const writeStream = fs.createWriteStream(outputPath);\r\n\r\n entry.pipe(writeStream);\r\n\r\n writeStream.on('finish', () => {\r\n if (process.platform !== 'win32') {\r\n fs.chmodSync(outputPath, 0o755);\r\n }\r\n this.cleanupFile(zipPath);\r\n resolve();\r\n });\r\n\r\n writeStream.on('error', (err: Error) => {\r\n this.cleanupFile(zipPath);\r\n reject(err);\r\n });\r\n } else {\r\n entry.autodrain();\r\n }\r\n })\r\n .on('error', (err: Error) => {\r\n this.cleanupFile(zipPath);\r\n reject(err);\r\n })\r\n .on('close', () => {\r\n if (!extracted) {\r\n this.cleanupFile(zipPath);\r\n reject(new Error(`No se encontró archivo válido en el ZIP para ${prefix}`));\r\n }\r\n });\r\n });\r\n }\r\n\r\n private static cleanupFile(filePath: string): void {\r\n try {\r\n if (fs.existsSync(filePath)) {\r\n fs.unlinkSync(filePath);\r\n }\r\n } catch {\r\n // Ignore cleanup errors\r\n }\r\n }\r\n\r\n private static getDefaultBinDir(): string {\r\n // Try to find a suitable directory for binaries in order of preference\r\n const possibleDirs = [\r\n path.resolve(process.cwd(), '.dbcube', 'bin'),\r\n path.resolve(process.cwd(), 'node_modules', '.dbcube', 'bin'),\r\n path.resolve(__dirname, '..', 'bin'),\r\n ];\r\n\r\n // Use the first one that can be created or already exists\r\n for (const dir of possibleDirs) {\r\n try {\r\n if (!fs.existsSync(dir)) {\r\n fs.mkdirSync(dir, { recursive: true });\r\n }\r\n // Test write permissions\r\n const testFile = path.join(dir, '.test');\r\n fs.writeFileSync(testFile, 'test');\r\n fs.unlinkSync(testFile);\r\n return dir;\r\n } catch {\r\n // Try next directory\r\n continue;\r\n }\r\n }\r\n\r\n // Fallback to .dbcube directory in temp\r\n const tempDir = path.join(os.tmpdir(), '.dbcube', 'bin');\r\n fs.mkdirSync(tempDir, { recursive: true });\r\n return tempDir;\r\n }\r\n}\r\n\r\nexport { Downloader };","#!/usr/bin/env node\r\n\r\nimport { Downloader } from \"./lib/Donwloader\";\r\n\r\n/**\r\n * Script CLI para descargar binarios manualmente\r\n */\r\nasync function main() {\r\n const args = process.argv.slice(2);\r\n const command = args[0];\r\n\r\n switch (command) {\r\n case 'install':\r\n case 'download':\r\n console.log('🚀 Iniciando descarga de binarios DBCube...');\r\n try {\r\n await Downloader.download();\r\n console.log('✅ ¡Todos los binarios descargados exitosamente!');\r\n } catch (error) {\r\n console.error('❌ Error descargando binarios:', error);\r\n }\r\n break;\r\n\r\n case 'check':\r\n console.log('🔍 Verificando binarios...');\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n for (const prefix of binaries) {\r\n const binary = Downloader.get(prefix);\r\n console.log(`${prefix}-engine: ${binary.name}`);\r\n console.log(` URL: ${binary.url}`);\r\n }\r\n break;\r\n\r\n default:\r\n console.log('DBCube Binary Manager');\r\n console.log('');\r\n console.log('Comandos disponibles:');\r\n console.log(' install|download - Descargar todos los binarios');\r\n console.log(' check - Verificar información de binarios');\r\n console.log('');\r\n console.log('Uso:');\r\n console.log(' npx @dbcube/core install');\r\n console.log(' npx @dbcube/core check');\r\n }\r\n}\r\n\r\nmain().catch(error => {\r\n console.error('Error:', error);\r\n});"],"mappings":"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","names":["platform","arch","os","arch","platform","resolve"]}
package/dist/index.cjs CHANGED
@@ -171,10 +171,11 @@ var Arquitecture = class {
171
171
  var fs = __toESM(require("fs"));
172
172
  var path = __toESM(require("path"));
173
173
  var os2 = __toESM(require("os"));
174
- var import_follow_redirects = require("follow-redirects");
174
+ var import_follow_redirects = __toESM(require("follow-redirects"));
175
175
  var unzipper = __toESM(require("unzipper"));
176
176
  var import_ora = __toESM(require("ora"));
177
177
  var import_chalk = __toESM(require("chalk"));
178
+ var { https } = import_follow_redirects.default;
178
179
  var Downloader = class {
179
180
  static mainSpinner = null;
180
181
  static currentSpinner = null;
@@ -303,7 +304,7 @@ var Downloader = class {
303
304
  }
304
305
  static downloadFileWithProgress(url, outputPath, prefix) {
305
306
  return new Promise((resolve5, reject) => {
306
- const request = import_follow_redirects.https.get(url, { timeout: 0 }, (response) => {
307
+ const request = https.get(url, { timeout: 0 }, (response) => {
307
308
  if (response.statusCode === 302 || response.statusCode === 301) {
308
309
  const redirectUrl = response.headers.location;
309
310
  if (redirectUrl) {
@@ -593,28 +594,17 @@ var Config = class {
593
594
  // src/lib/Engine.ts
594
595
  var import_child_process = require("child_process");
595
596
  var import_module = require("module");
596
- var Engine = class _Engine {
597
+ var Engine = class {
597
598
  name;
598
599
  config;
599
600
  arguments;
600
601
  binary = null;
601
602
  timeout;
602
- static instances = /* @__PURE__ */ new Map();
603
603
  constructor(name, timeout = 3e4) {
604
- if (_Engine.instances.has(name)) {
605
- return _Engine.instances.get(name);
606
- }
607
604
  this.name = name;
608
- this.timeout = timeout;
609
605
  this.config = this.setConfig(name);
610
606
  this.arguments = this.setArguments();
611
- _Engine.instances.set(name, this);
612
- }
613
- static getInstance(name, timeout = 3e4) {
614
- if (_Engine.instances.has(name)) {
615
- return _Engine.instances.get(name);
616
- }
617
- return new _Engine(name, timeout);
607
+ this.timeout = timeout;
618
608
  }
619
609
  async initializeBinary() {
620
610
  if (!this.binary) {
@@ -707,7 +697,6 @@ var Engine = class _Engine {
707
697
  };
708
698
  child.stdout.on("data", (data) => {
709
699
  stdoutBuffer += data.toString();
710
- console.log(stdoutBuffer);
711
700
  const match = stdoutBuffer.match(/PROCESS_RESPONSE:(\{.*\})/);
712
701
  if (match) {
713
702
  try {
@@ -728,7 +717,6 @@ var Engine = class _Engine {
728
717
  });
729
718
  child.stderr.on("data", (data) => {
730
719
  stderrBuffer += data.toString();
731
- console.log(stderrBuffer);
732
720
  const match = stderrBuffer.match(/PROCESS_RESPONSE:(\{.*\})/);
733
721
  if (match) {
734
722
  try {