@dbcube/core
Version:
1 lines • 18.8 kB
Source Map (JSON)
{"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'];\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\r\n await new Promise<void>((resolve, reject) => {\r\n const file = fs.createWriteStream(tempZipPath);\r\n \r\n https.get(binaryInfo.url, (response: IncomingMessage) => {\r\n console.log(`Respuesta HTTP para ${prefix}: ${response.statusCode}`);\r\n \r\n if (response.statusCode !== 200) {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(new Error(`Failed to download file: ${response.statusCode}`));\r\n return;\r\n }\r\n\r\n response.pipe(file);\r\n \r\n file.on(\"finish\", () => {\r\n file.close();\r\n resolve();\r\n });\r\n \r\n file.on(\"error\", (err: Error) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\r\n });\r\n \r\n }).on(\"error\", (err: Error) => {\r\n file.close();\r\n try { fs.unlinkSync(tempZipPath); } catch {}\r\n reject(err);\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'];\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"]}