@dbcube/core 1.0.24 → 1.0.26
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 +116 -104
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +116 -104
- package/dist/bin.js.map +1 -1
- package/dist/install.cjs +131 -110
- package/dist/install.cjs.map +1 -1
- package/dist/install.js +131 -110
- package/dist/install.js.map +1 -1
- package/package.json +1 -1
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\n\r\nclass Downloader {\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 arm64: \"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(): Promise<void> {\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n const binDir = path.resolve(__dirname, \"..\", \"bin\");\r\n fs.mkdirSync(binDir, { recursive: true });\r\n\r\n for (const prefix of binaries) {\r\n try {\r\n console.log(`==> Empezando descarga para: ${prefix}`);\r\n const binaryInfo = this.get(prefix);\r\n console.log(`Descargando: ${binaryInfo.name}`);\r\n console.log(`URL: ${binaryInfo.url}`);\r\n\r\n if (!binaryInfo.name) {\r\n throw new Error(\"Unsupported platform or architecture\");\r\n }\r\n\r\n const tempZipPath = path.join(os.tmpdir(), `binary-${prefix}-${Date.now()}.zip`);\r\n const finalBinaryPath = path.join(binDir, binaryInfo.name);\r\n\r\n if (fs.existsSync(finalBinaryPath)) {\r\n console.log(`⚠️ El binario ya existe, omitiendo: ${finalBinaryPath}`);\r\n continue;\r\n }\r\n\r\n // Descargar el archivo ZIP de forma más robusta\r\n await new Promise<void>((resolve, reject) => {\r\n console.log(`Iniciando descarga de ${prefix}...`);\r\n \r\n const request = https.get(binaryInfo.url, (response: IncomingMessage) => {\r\n console.log(`HTTP ${response.statusCode} para ${prefix}`);\r\n \r\n if (response.statusCode === 302 || response.statusCode === 301) {\r\n // Manejar redirección\r\n const redirectUrl = response.headers.location;\r\n if (redirectUrl) {\r\n console.log(`Redirigiendo a: ${redirectUrl}`);\r\n https.get(redirectUrl, handleResponse);\r\n return;\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 handleResponse(response);\r\n });\r\n\r\n function handleResponse(response: IncomingMessage) {\r\n const file = fs.createWriteStream(tempZipPath);\r\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\r\n let downloadedBytes = 0;\r\n \r\n console.log(`Descargando ${(totalBytes / 1024 / 1024).toFixed(1)}MB para ${prefix}...`);\r\n\r\n response.on('data', (chunk) => {\r\n downloadedBytes += chunk.length;\r\n file.write(chunk);\r\n });\r\n\r\n response.on('end', () => {\r\n file.end();\r\n console.log(`✅ Descarga completada para ${prefix}`);\r\n resolve();\r\n });\r\n\r\n response.on('error', (err) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n });\r\n\r\n file.on('error', (err) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n });\r\n }\r\n\r\n request.on('error', (err) => {\r\n reject(err);\r\n });\r\n\r\n // Timeout de 2 minutos\r\n request.setTimeout(120000, () => {\r\n request.destroy();\r\n reject(new Error(`Timeout descargando ${prefix}`));\r\n });\r\n });\r\n\r\n console.log(`Zip descargado para ${prefix}, extrayendo...`);\r\n\r\n // Extraer el archivo ZIP\r\n await new Promise<void>((resolve, reject) => {\r\n let extracted = false;\r\n \r\n fs.createReadStream(tempZipPath)\r\n .pipe(unzipper.Parse())\r\n .on('entry', (entry: unzipper.Entry) => {\r\n const fileName: string = entry.path;\r\n const type: string = entry.type;\r\n \r\n console.log(`Encontrado en ZIP: ${fileName} (${type})`);\r\n \r\n if (type === 'File' && !extracted) {\r\n extracted = true;\r\n const writeStream = fs.createWriteStream(finalBinaryPath);\r\n \r\n entry.pipe(writeStream);\r\n \r\n writeStream.on('finish', () => {\r\n // Hacer el archivo ejecutable en sistemas Unix\r\n if (process.platform !== 'win32') {\r\n fs.chmodSync(finalBinaryPath, 0o755);\r\n }\r\n \r\n // Limpiar archivo temporal\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n \r\n console.log(`Binario extraído y guardado: ${finalBinaryPath}`);\r\n resolve();\r\n });\r\n \r\n writeStream.on('error', (err: Error) => {\r\n try { fs.unlinkSync(tempZipPath); } catch {}\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 try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n })\r\n .on('close', () => {\r\n if (!extracted) {\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(new Error(`No se encontró ningún archivo válido en el ZIP para ${prefix}`));\r\n }\r\n });\r\n });\r\n\r\n console.log(`==> Finalizó descarga y extracción para: ${prefix}`);\r\n\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n console.error(`Error descargando binario ${prefix}:`, errorMessage);\r\n throw error; // Re-lanzar el error para que se pueda manejar externamente si es necesario\r\n }\r\n }\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 process.exit(1);\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 process.exit(1);\r\n});"],"mappings":"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","names":["platform","arch","os","arch","platform","resolve","type"]}
|
|
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\n\r\nclass Downloader {\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 arm64: \"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(): Promise<void> {\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n const binDir = path.resolve(__dirname, \"..\", \"bin\");\r\n fs.mkdirSync(binDir, { recursive: true });\r\n\r\n for (const prefix of binaries) {\r\n const maxRetries = 2;\r\n let attempt = 0;\r\n \r\n while (attempt <= maxRetries) {\r\n try {\r\n console.log(`==> Empezando descarga para: ${prefix} (intento ${attempt + 1}/${maxRetries + 1})`);\r\n const binaryInfo = this.get(prefix);\r\n console.log(`Descargando: ${binaryInfo.name}`);\r\n console.log(`URL: ${binaryInfo.url}`);\r\n\r\n if (!binaryInfo.name) {\r\n throw new Error(\"Unsupported platform or architecture\");\r\n }\r\n\r\n const tempZipPath = path.join(os.tmpdir(), `binary-${prefix}-${Date.now()}.zip`);\r\n const finalBinaryPath = path.join(binDir, binaryInfo.name);\r\n\r\n if (fs.existsSync(finalBinaryPath)) {\r\n console.log(`⚠️ El binario ya existe, omitiendo: ${finalBinaryPath}`);\r\n break;\r\n }\r\n\r\n // Descargar el archivo ZIP de forma más robusta\r\n await new Promise<void>((resolve, reject) => {\r\n console.log(`Iniciando descarga de ${prefix}...`);\r\n \r\n const request = https.get(binaryInfo.url, (response: IncomingMessage) => {\r\n console.log(`HTTP ${response.statusCode} para ${prefix}`);\r\n \r\n if (response.statusCode === 302 || response.statusCode === 301) {\r\n // Manejar redirección\r\n const redirectUrl = response.headers.location;\r\n if (redirectUrl) {\r\n console.log(`Redirigiendo a: ${redirectUrl}`);\r\n https.get(redirectUrl, handleResponse);\r\n return;\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 handleResponse(response);\r\n });\r\n\r\n function handleResponse(response: IncomingMessage) {\r\n const file = fs.createWriteStream(tempZipPath);\r\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\r\n let downloadedBytes = 0;\r\n \r\n console.log(`Descargando ${(totalBytes / 1024 / 1024).toFixed(1)}MB para ${prefix}...`);\r\n\r\n response.on('data', (chunk) => {\r\n downloadedBytes += chunk.length;\r\n file.write(chunk);\r\n });\r\n\r\n response.on('end', () => {\r\n file.end();\r\n console.log(`✅ Descarga completada para ${prefix}`);\r\n resolve();\r\n });\r\n\r\n response.on('error', (err) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n });\r\n\r\n file.on('error', (err) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n });\r\n }\r\n\r\n request.on('error', (err) => {\r\n reject(err);\r\n });\r\n\r\n // Timeout de 2 minutos\r\n request.setTimeout(120000, () => {\r\n request.destroy();\r\n reject(new Error(`Timeout descargando ${prefix}`));\r\n });\r\n });\r\n\r\n console.log(`Zip descargado para ${prefix}, extrayendo...`);\r\n\r\n // Extraer el archivo ZIP\r\n await new Promise<void>((resolve, reject) => {\r\n let extracted = false;\r\n \r\n fs.createReadStream(tempZipPath)\r\n .pipe(unzipper.Parse())\r\n .on('entry', (entry: unzipper.Entry) => {\r\n const fileName: string = entry.path;\r\n const type: string = entry.type;\r\n \r\n console.log(`Encontrado en ZIP: ${fileName} (${type})`);\r\n \r\n if (type === 'File' && !extracted) {\r\n extracted = true;\r\n const writeStream = fs.createWriteStream(finalBinaryPath);\r\n \r\n entry.pipe(writeStream);\r\n \r\n writeStream.on('finish', () => {\r\n // Hacer el archivo ejecutable en sistemas Unix\r\n if (process.platform !== 'win32') {\r\n fs.chmodSync(finalBinaryPath, 0o755);\r\n }\r\n \r\n // Limpiar archivo temporal\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n \r\n console.log(`Binario extraído y guardado: ${finalBinaryPath}`);\r\n resolve();\r\n });\r\n \r\n writeStream.on('error', (err: Error) => {\r\n try { fs.unlinkSync(tempZipPath); } catch {}\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 try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n })\r\n .on('close', () => {\r\n if (!extracted) {\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(new Error(`No se encontró ningún archivo válido en el ZIP para ${prefix}`));\r\n }\r\n });\r\n });\r\n\r\n console.log(`==> Finalizó descarga y extracción para: ${prefix}`);\r\n break; // Éxito, salir del loop de reintentos\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 && (errorMessage.includes('ECONNRESET') || errorMessage.includes('timeout'))) {\r\n console.warn(`⚠️ Error de conexión para ${prefix}: ${errorMessage}`);\r\n console.log(`🔄 Reintentando en 2 segundos...`);\r\n attempt++;\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n } else {\r\n console.error(`❌ Error final descargando ${prefix} después de ${attempt + 1} intentos:`, errorMessage);\r\n throw error; // Re-lanzar después de todos los intentos\r\n }\r\n }\r\n }\r\n }\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 process.exit(1);\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 process.exit(1);\r\n});"],"mappings":"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","names":["platform","arch","os","arch","platform","resolve","type"]}
|
package/dist/install.cjs
CHANGED
|
@@ -189,130 +189,142 @@ var Downloader = class {
|
|
|
189
189
|
const binDir = path.resolve(__dirname, "..", "bin");
|
|
190
190
|
fs.mkdirSync(binDir, { recursive: true });
|
|
191
191
|
for (const prefix of binaries) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
handleResponse(response);
|
|
223
|
-
});
|
|
224
|
-
function handleResponse(response) {
|
|
225
|
-
const file = fs.createWriteStream(tempZipPath);
|
|
226
|
-
const totalBytes = parseInt(response.headers["content-length"] || "0", 10);
|
|
227
|
-
let downloadedBytes = 0;
|
|
228
|
-
console.log(`Descargando ${(totalBytes / 1024 / 1024).toFixed(1)}MB para ${prefix}...`);
|
|
229
|
-
response.on("data", (chunk) => {
|
|
230
|
-
downloadedBytes += chunk.length;
|
|
231
|
-
file.write(chunk);
|
|
232
|
-
});
|
|
233
|
-
response.on("end", () => {
|
|
234
|
-
file.end();
|
|
235
|
-
console.log(`\u2705 Descarga completada para ${prefix}`);
|
|
236
|
-
resolve2();
|
|
237
|
-
});
|
|
238
|
-
response.on("error", (err) => {
|
|
239
|
-
file.close();
|
|
240
|
-
try {
|
|
241
|
-
fs.unlinkSync(tempZipPath);
|
|
242
|
-
} catch {
|
|
192
|
+
const maxRetries = 2;
|
|
193
|
+
let attempt = 0;
|
|
194
|
+
while (attempt <= maxRetries) {
|
|
195
|
+
try {
|
|
196
|
+
console.log(`==> Empezando descarga para: ${prefix} (intento ${attempt + 1}/${maxRetries + 1})`);
|
|
197
|
+
const binaryInfo = this.get(prefix);
|
|
198
|
+
console.log(`Descargando: ${binaryInfo.name}`);
|
|
199
|
+
console.log(`URL: ${binaryInfo.url}`);
|
|
200
|
+
if (!binaryInfo.name) {
|
|
201
|
+
throw new Error("Unsupported platform or architecture");
|
|
202
|
+
}
|
|
203
|
+
const tempZipPath = path.join(os2.tmpdir(), `binary-${prefix}-${Date.now()}.zip`);
|
|
204
|
+
const finalBinaryPath = path.join(binDir, binaryInfo.name);
|
|
205
|
+
if (fs.existsSync(finalBinaryPath)) {
|
|
206
|
+
console.log(`\u26A0\uFE0F El binario ya existe, omitiendo: ${finalBinaryPath}`);
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
await new Promise((resolve2, reject) => {
|
|
210
|
+
console.log(`Iniciando descarga de ${prefix}...`);
|
|
211
|
+
const request = import_follow_redirects.https.get(binaryInfo.url, (response) => {
|
|
212
|
+
console.log(`HTTP ${response.statusCode} para ${prefix}`);
|
|
213
|
+
if (response.statusCode === 302 || response.statusCode === 301) {
|
|
214
|
+
const redirectUrl = response.headers.location;
|
|
215
|
+
if (redirectUrl) {
|
|
216
|
+
console.log(`Redirigiendo a: ${redirectUrl}`);
|
|
217
|
+
import_follow_redirects.https.get(redirectUrl, handleResponse);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
243
220
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
file.close();
|
|
248
|
-
try {
|
|
249
|
-
fs.unlinkSync(tempZipPath);
|
|
250
|
-
} catch {
|
|
221
|
+
if (response.statusCode !== 200) {
|
|
222
|
+
reject(new Error(`HTTP ${response.statusCode} para ${prefix}`));
|
|
223
|
+
return;
|
|
251
224
|
}
|
|
252
|
-
|
|
225
|
+
handleResponse(response);
|
|
253
226
|
});
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
if (type2 === "File" && !extracted) {
|
|
271
|
-
extracted = true;
|
|
272
|
-
const writeStream = fs.createWriteStream(finalBinaryPath);
|
|
273
|
-
entry.pipe(writeStream);
|
|
274
|
-
writeStream.on("finish", () => {
|
|
275
|
-
if (process.platform !== "win32") {
|
|
276
|
-
fs.chmodSync(finalBinaryPath, 493);
|
|
277
|
-
}
|
|
227
|
+
function handleResponse(response) {
|
|
228
|
+
const file = fs.createWriteStream(tempZipPath);
|
|
229
|
+
const totalBytes = parseInt(response.headers["content-length"] || "0", 10);
|
|
230
|
+
let downloadedBytes = 0;
|
|
231
|
+
console.log(`Descargando ${(totalBytes / 1024 / 1024).toFixed(1)}MB para ${prefix}...`);
|
|
232
|
+
response.on("data", (chunk) => {
|
|
233
|
+
downloadedBytes += chunk.length;
|
|
234
|
+
file.write(chunk);
|
|
235
|
+
});
|
|
236
|
+
response.on("end", () => {
|
|
237
|
+
file.end();
|
|
238
|
+
console.log(`\u2705 Descarga completada para ${prefix}`);
|
|
239
|
+
resolve2();
|
|
240
|
+
});
|
|
241
|
+
response.on("error", (err) => {
|
|
242
|
+
file.close();
|
|
278
243
|
try {
|
|
279
244
|
fs.unlinkSync(tempZipPath);
|
|
280
245
|
} catch {
|
|
281
246
|
}
|
|
282
|
-
|
|
283
|
-
resolve2();
|
|
247
|
+
reject(err);
|
|
284
248
|
});
|
|
285
|
-
|
|
249
|
+
file.on("error", (err) => {
|
|
250
|
+
file.close();
|
|
286
251
|
try {
|
|
287
252
|
fs.unlinkSync(tempZipPath);
|
|
288
253
|
} catch {
|
|
289
254
|
}
|
|
290
255
|
reject(err);
|
|
291
256
|
});
|
|
292
|
-
} else {
|
|
293
|
-
entry.autodrain();
|
|
294
|
-
}
|
|
295
|
-
}).on("error", (err) => {
|
|
296
|
-
try {
|
|
297
|
-
fs.unlinkSync(tempZipPath);
|
|
298
|
-
} catch {
|
|
299
257
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
258
|
+
request.on("error", (err) => {
|
|
259
|
+
reject(err);
|
|
260
|
+
});
|
|
261
|
+
request.setTimeout(12e4, () => {
|
|
262
|
+
request.destroy();
|
|
263
|
+
reject(new Error(`Timeout descargando ${prefix}`));
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
console.log(`Zip descargado para ${prefix}, extrayendo...`);
|
|
267
|
+
await new Promise((resolve2, reject) => {
|
|
268
|
+
let extracted = false;
|
|
269
|
+
fs.createReadStream(tempZipPath).pipe(unzipper.Parse()).on("entry", (entry) => {
|
|
270
|
+
const fileName = entry.path;
|
|
271
|
+
const type2 = entry.type;
|
|
272
|
+
console.log(`Encontrado en ZIP: ${fileName} (${type2})`);
|
|
273
|
+
if (type2 === "File" && !extracted) {
|
|
274
|
+
extracted = true;
|
|
275
|
+
const writeStream = fs.createWriteStream(finalBinaryPath);
|
|
276
|
+
entry.pipe(writeStream);
|
|
277
|
+
writeStream.on("finish", () => {
|
|
278
|
+
if (process.platform !== "win32") {
|
|
279
|
+
fs.chmodSync(finalBinaryPath, 493);
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
fs.unlinkSync(tempZipPath);
|
|
283
|
+
} catch {
|
|
284
|
+
}
|
|
285
|
+
console.log(`Binario extra\xEDdo y guardado: ${finalBinaryPath}`);
|
|
286
|
+
resolve2();
|
|
287
|
+
});
|
|
288
|
+
writeStream.on("error", (err) => {
|
|
289
|
+
try {
|
|
290
|
+
fs.unlinkSync(tempZipPath);
|
|
291
|
+
} catch {
|
|
292
|
+
}
|
|
293
|
+
reject(err);
|
|
294
|
+
});
|
|
295
|
+
} else {
|
|
296
|
+
entry.autodrain();
|
|
297
|
+
}
|
|
298
|
+
}).on("error", (err) => {
|
|
303
299
|
try {
|
|
304
300
|
fs.unlinkSync(tempZipPath);
|
|
305
301
|
} catch {
|
|
306
302
|
}
|
|
307
|
-
reject(
|
|
308
|
-
}
|
|
303
|
+
reject(err);
|
|
304
|
+
}).on("close", () => {
|
|
305
|
+
if (!extracted) {
|
|
306
|
+
try {
|
|
307
|
+
fs.unlinkSync(tempZipPath);
|
|
308
|
+
} catch {
|
|
309
|
+
}
|
|
310
|
+
reject(new Error(`No se encontr\xF3 ning\xFAn archivo v\xE1lido en el ZIP para ${prefix}`));
|
|
311
|
+
}
|
|
312
|
+
});
|
|
309
313
|
});
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
314
|
+
console.log(`==> Finaliz\xF3 descarga y extracci\xF3n para: ${prefix}`);
|
|
315
|
+
break;
|
|
316
|
+
} catch (error) {
|
|
317
|
+
const errorMessage = error instanceof Error ? error.message : "Error desconocido";
|
|
318
|
+
if (attempt < maxRetries && (errorMessage.includes("ECONNRESET") || errorMessage.includes("timeout"))) {
|
|
319
|
+
console.warn(`\u26A0\uFE0F Error de conexi\xF3n para ${prefix}: ${errorMessage}`);
|
|
320
|
+
console.log(`\u{1F504} Reintentando en 2 segundos...`);
|
|
321
|
+
attempt++;
|
|
322
|
+
await new Promise((resolve2) => setTimeout(resolve2, 2e3));
|
|
323
|
+
} else {
|
|
324
|
+
console.error(`\u274C Error final descargando ${prefix} despu\xE9s de ${attempt + 1} intentos:`, errorMessage);
|
|
325
|
+
throw error;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
316
328
|
}
|
|
317
329
|
}
|
|
318
330
|
}
|
|
@@ -320,12 +332,21 @@ var Downloader = class {
|
|
|
320
332
|
|
|
321
333
|
// src/install.ts
|
|
322
334
|
(async () => {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
const
|
|
326
|
-
|
|
327
|
-
|
|
335
|
+
console.log("\u{1F680} DBCube: Instalando binarios...");
|
|
336
|
+
try {
|
|
337
|
+
const binaries = ["schema", "query", "sqlite"];
|
|
338
|
+
for (const prefix of binaries) {
|
|
339
|
+
const binary = Downloader.get(prefix);
|
|
340
|
+
console.log("Descargando:", binary.name);
|
|
341
|
+
console.log("URL:", binary.url);
|
|
342
|
+
}
|
|
343
|
+
await Downloader.download();
|
|
344
|
+
console.log("\u2705 DBCube: Todos los binarios instalados correctamente");
|
|
345
|
+
} catch (error) {
|
|
346
|
+
console.warn("\u26A0\uFE0F DBCube: Error instalando binarios:", error.message);
|
|
347
|
+
console.log("\u{1F4A1} Los binarios se pueden instalar m\xE1s tarde manualmente");
|
|
348
|
+
console.log("\u{1F527} DBCube funcionar\xE1 y descargar\xE1 los binarios cuando sea necesario");
|
|
349
|
+
console.log("\u2705 Instalaci\xF3n del paquete completada (binarios pendientes)");
|
|
328
350
|
}
|
|
329
|
-
await Downloader.download();
|
|
330
351
|
})();
|
|
331
352
|
//# sourceMappingURL=install.cjs.map
|
package/dist/install.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/Arquitecture.ts","../src/lib/Donwloader.ts","../src/install.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\n\r\nclass Downloader {\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 arm64: \"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(): Promise<void> {\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n const binDir = path.resolve(__dirname, \"..\", \"bin\");\r\n fs.mkdirSync(binDir, { recursive: true });\r\n\r\n for (const prefix of binaries) {\r\n try {\r\n console.log(`==> Empezando descarga para: ${prefix}`);\r\n const binaryInfo = this.get(prefix);\r\n console.log(`Descargando: ${binaryInfo.name}`);\r\n console.log(`URL: ${binaryInfo.url}`);\r\n\r\n if (!binaryInfo.name) {\r\n throw new Error(\"Unsupported platform or architecture\");\r\n }\r\n\r\n const tempZipPath = path.join(os.tmpdir(), `binary-${prefix}-${Date.now()}.zip`);\r\n const finalBinaryPath = path.join(binDir, binaryInfo.name);\r\n\r\n if (fs.existsSync(finalBinaryPath)) {\r\n console.log(`⚠️ El binario ya existe, omitiendo: ${finalBinaryPath}`);\r\n continue;\r\n }\r\n\r\n // Descargar el archivo ZIP de forma más robusta\r\n await new Promise<void>((resolve, reject) => {\r\n console.log(`Iniciando descarga de ${prefix}...`);\r\n \r\n const request = https.get(binaryInfo.url, (response: IncomingMessage) => {\r\n console.log(`HTTP ${response.statusCode} para ${prefix}`);\r\n \r\n if (response.statusCode === 302 || response.statusCode === 301) {\r\n // Manejar redirección\r\n const redirectUrl = response.headers.location;\r\n if (redirectUrl) {\r\n console.log(`Redirigiendo a: ${redirectUrl}`);\r\n https.get(redirectUrl, handleResponse);\r\n return;\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 handleResponse(response);\r\n });\r\n\r\n function handleResponse(response: IncomingMessage) {\r\n const file = fs.createWriteStream(tempZipPath);\r\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\r\n let downloadedBytes = 0;\r\n \r\n console.log(`Descargando ${(totalBytes / 1024 / 1024).toFixed(1)}MB para ${prefix}...`);\r\n\r\n response.on('data', (chunk) => {\r\n downloadedBytes += chunk.length;\r\n file.write(chunk);\r\n });\r\n\r\n response.on('end', () => {\r\n file.end();\r\n console.log(`✅ Descarga completada para ${prefix}`);\r\n resolve();\r\n });\r\n\r\n response.on('error', (err) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n });\r\n\r\n file.on('error', (err) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n });\r\n }\r\n\r\n request.on('error', (err) => {\r\n reject(err);\r\n });\r\n\r\n // Timeout de 2 minutos\r\n request.setTimeout(120000, () => {\r\n request.destroy();\r\n reject(new Error(`Timeout descargando ${prefix}`));\r\n });\r\n });\r\n\r\n console.log(`Zip descargado para ${prefix}, extrayendo...`);\r\n\r\n // Extraer el archivo ZIP\r\n await new Promise<void>((resolve, reject) => {\r\n let extracted = false;\r\n \r\n fs.createReadStream(tempZipPath)\r\n .pipe(unzipper.Parse())\r\n .on('entry', (entry: unzipper.Entry) => {\r\n const fileName: string = entry.path;\r\n const type: string = entry.type;\r\n \r\n console.log(`Encontrado en ZIP: ${fileName} (${type})`);\r\n \r\n if (type === 'File' && !extracted) {\r\n extracted = true;\r\n const writeStream = fs.createWriteStream(finalBinaryPath);\r\n \r\n entry.pipe(writeStream);\r\n \r\n writeStream.on('finish', () => {\r\n // Hacer el archivo ejecutable en sistemas Unix\r\n if (process.platform !== 'win32') {\r\n fs.chmodSync(finalBinaryPath, 0o755);\r\n }\r\n \r\n // Limpiar archivo temporal\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n \r\n console.log(`Binario extraído y guardado: ${finalBinaryPath}`);\r\n resolve();\r\n });\r\n \r\n writeStream.on('error', (err: Error) => {\r\n try { fs.unlinkSync(tempZipPath); } catch {}\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 try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n })\r\n .on('close', () => {\r\n if (!extracted) {\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(new Error(`No se encontró ningún archivo válido en el ZIP para ${prefix}`));\r\n }\r\n });\r\n });\r\n\r\n console.log(`==> Finalizó descarga y extracción para: ${prefix}`);\r\n\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Error desconocido';\r\n console.error(`Error descargando binario ${prefix}:`, errorMessage);\r\n throw error; // Re-lanzar el error para que se pueda manejar externamente si es necesario\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { Downloader };","import { Downloader } from \"./lib/Donwloader\";\r\n\r\n\r\n(async () => {\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(\"Descargando:\", binary.name);\r\n console.log(\"URL:\", binary.url);\r\n }\r\n await Downloader.download();\r\n})();\r\n"],"mappings":"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","names":["platform","arch","os","arch","platform","resolve","type"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/Arquitecture.ts","../src/lib/Donwloader.ts","../src/install.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\n\r\nclass Downloader {\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 arm64: \"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(): Promise<void> {\r\n const binaries = ['schema', 'query', 'sqlite'];\r\n const binDir = path.resolve(__dirname, \"..\", \"bin\");\r\n fs.mkdirSync(binDir, { recursive: true });\r\n\r\n for (const prefix of binaries) {\r\n const maxRetries = 2;\r\n let attempt = 0;\r\n \r\n while (attempt <= maxRetries) {\r\n try {\r\n console.log(`==> Empezando descarga para: ${prefix} (intento ${attempt + 1}/${maxRetries + 1})`);\r\n const binaryInfo = this.get(prefix);\r\n console.log(`Descargando: ${binaryInfo.name}`);\r\n console.log(`URL: ${binaryInfo.url}`);\r\n\r\n if (!binaryInfo.name) {\r\n throw new Error(\"Unsupported platform or architecture\");\r\n }\r\n\r\n const tempZipPath = path.join(os.tmpdir(), `binary-${prefix}-${Date.now()}.zip`);\r\n const finalBinaryPath = path.join(binDir, binaryInfo.name);\r\n\r\n if (fs.existsSync(finalBinaryPath)) {\r\n console.log(`⚠️ El binario ya existe, omitiendo: ${finalBinaryPath}`);\r\n break;\r\n }\r\n\r\n // Descargar el archivo ZIP de forma más robusta\r\n await new Promise<void>((resolve, reject) => {\r\n console.log(`Iniciando descarga de ${prefix}...`);\r\n \r\n const request = https.get(binaryInfo.url, (response: IncomingMessage) => {\r\n console.log(`HTTP ${response.statusCode} para ${prefix}`);\r\n \r\n if (response.statusCode === 302 || response.statusCode === 301) {\r\n // Manejar redirección\r\n const redirectUrl = response.headers.location;\r\n if (redirectUrl) {\r\n console.log(`Redirigiendo a: ${redirectUrl}`);\r\n https.get(redirectUrl, handleResponse);\r\n return;\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 handleResponse(response);\r\n });\r\n\r\n function handleResponse(response: IncomingMessage) {\r\n const file = fs.createWriteStream(tempZipPath);\r\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\r\n let downloadedBytes = 0;\r\n \r\n console.log(`Descargando ${(totalBytes / 1024 / 1024).toFixed(1)}MB para ${prefix}...`);\r\n\r\n response.on('data', (chunk) => {\r\n downloadedBytes += chunk.length;\r\n file.write(chunk);\r\n });\r\n\r\n response.on('end', () => {\r\n file.end();\r\n console.log(`✅ Descarga completada para ${prefix}`);\r\n resolve();\r\n });\r\n\r\n response.on('error', (err) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n });\r\n\r\n file.on('error', (err) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n });\r\n }\r\n\r\n request.on('error', (err) => {\r\n reject(err);\r\n });\r\n\r\n // Timeout de 2 minutos\r\n request.setTimeout(120000, () => {\r\n request.destroy();\r\n reject(new Error(`Timeout descargando ${prefix}`));\r\n });\r\n });\r\n\r\n console.log(`Zip descargado para ${prefix}, extrayendo...`);\r\n\r\n // Extraer el archivo ZIP\r\n await new Promise<void>((resolve, reject) => {\r\n let extracted = false;\r\n \r\n fs.createReadStream(tempZipPath)\r\n .pipe(unzipper.Parse())\r\n .on('entry', (entry: unzipper.Entry) => {\r\n const fileName: string = entry.path;\r\n const type: string = entry.type;\r\n \r\n console.log(`Encontrado en ZIP: ${fileName} (${type})`);\r\n \r\n if (type === 'File' && !extracted) {\r\n extracted = true;\r\n const writeStream = fs.createWriteStream(finalBinaryPath);\r\n \r\n entry.pipe(writeStream);\r\n \r\n writeStream.on('finish', () => {\r\n // Hacer el archivo ejecutable en sistemas Unix\r\n if (process.platform !== 'win32') {\r\n fs.chmodSync(finalBinaryPath, 0o755);\r\n }\r\n \r\n // Limpiar archivo temporal\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n \r\n console.log(`Binario extraído y guardado: ${finalBinaryPath}`);\r\n resolve();\r\n });\r\n \r\n writeStream.on('error', (err: Error) => {\r\n try { fs.unlinkSync(tempZipPath); } catch {}\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 try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n })\r\n .on('close', () => {\r\n if (!extracted) {\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(new Error(`No se encontró ningún archivo válido en el ZIP para ${prefix}`));\r\n }\r\n });\r\n });\r\n\r\n console.log(`==> Finalizó descarga y extracción para: ${prefix}`);\r\n break; // Éxito, salir del loop de reintentos\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 && (errorMessage.includes('ECONNRESET') || errorMessage.includes('timeout'))) {\r\n console.warn(`⚠️ Error de conexión para ${prefix}: ${errorMessage}`);\r\n console.log(`🔄 Reintentando en 2 segundos...`);\r\n attempt++;\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n } else {\r\n console.error(`❌ Error final descargando ${prefix} después de ${attempt + 1} intentos:`, errorMessage);\r\n throw error; // Re-lanzar después de todos los intentos\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { Downloader };","import { Downloader } from \"./lib/Donwloader\";\r\n\r\n\r\n(async () => {\r\n console.log('🚀 DBCube: Instalando binarios...');\r\n \r\n try {\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(\"Descargando:\", binary.name);\r\n console.log(\"URL:\", binary.url);\r\n }\r\n \r\n await Downloader.download();\r\n console.log('✅ DBCube: Todos los binarios instalados correctamente');\r\n } catch (error) {\r\n console.warn('⚠️ DBCube: Error instalando binarios:', (error as Error).message);\r\n console.log('💡 Los binarios se pueden instalar más tarde manualmente');\r\n console.log('🔧 DBCube funcionará y descargará los binarios cuando sea necesario');\r\n \r\n // NO fallar la instalación del paquete por errores de red\r\n console.log('✅ Instalación del paquete completada (binarios pendientes)');\r\n }\r\n})();\r\n"],"mappings":"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","names":["platform","arch","os","arch","platform","resolve","type"]}
|