@dbcube/core 1.0.23 → 1.0.24

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 ADDED
@@ -0,0 +1,363 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
18
+ // If the importer is in node compatibility mode or this is not an ESM
19
+ // file that has been converted to a CommonJS file using a Babel-
20
+ // compatible transform (i.e. "__esModule" has not been set), then set
21
+ // "default" to the CommonJS "module.exports" for node compatibility.
22
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
23
+ mod
24
+ ));
25
+
26
+ // src/lib/Arquitecture.ts
27
+ var os = __toESM(require("os"));
28
+ var Arquitecture = class {
29
+ systemInfo;
30
+ constructor() {
31
+ this.systemInfo = this.detectSystemInfo();
32
+ }
33
+ /**
34
+ * Detecta información completa del sistema
35
+ */
36
+ detectSystemInfo() {
37
+ return {
38
+ platform: os.platform(),
39
+ arch: os.arch(),
40
+ release: os.release(),
41
+ type: os.type(),
42
+ endianness: os.endianness(),
43
+ cpus: os.cpus().length
44
+ };
45
+ }
46
+ /**
47
+ * Obtiene la plataforma normalizada
48
+ */
49
+ getPlatform() {
50
+ const platform2 = this.systemInfo.platform;
51
+ switch (platform2) {
52
+ case "win32":
53
+ return "windows";
54
+ case "darwin":
55
+ return "macos";
56
+ case "linux":
57
+ return "linux";
58
+ case "freebsd":
59
+ return "freebsd";
60
+ case "openbsd":
61
+ return "openbsd";
62
+ case "sunos":
63
+ return "solaris";
64
+ default:
65
+ return platform2;
66
+ }
67
+ }
68
+ /**
69
+ * Obtiene la arquitectura normalizada
70
+ */
71
+ getArchitecture() {
72
+ const arch2 = this.systemInfo.arch;
73
+ switch (arch2) {
74
+ case "x64":
75
+ return "x86_64";
76
+ case "x32":
77
+ case "ia32":
78
+ return "i686";
79
+ case "arm64":
80
+ return "aarch64";
81
+ case "arm":
82
+ return "armv7";
83
+ case "ppc64":
84
+ return "powerpc64";
85
+ case "ppc":
86
+ return "powerpc";
87
+ case "s390x":
88
+ return "s390x";
89
+ case "mips":
90
+ return "mips";
91
+ case "mipsel":
92
+ return "mipsel";
93
+ default:
94
+ return arch2;
95
+ }
96
+ }
97
+ /**
98
+ * Genera el nombre del binario basado en la arquitectura
99
+ */
100
+ getBinaryName(baseName) {
101
+ const platform2 = this.getPlatform();
102
+ const arch2 = this.getArchitecture();
103
+ const extension = platform2 === "windows" ? ".exe" : "";
104
+ return `${baseName}-${platform2}-${arch2}${extension}`;
105
+ }
106
+ /**
107
+ * Obtiene información completa del sistema
108
+ */
109
+ getSystemInfo() {
110
+ return { ...this.systemInfo };
111
+ }
112
+ /**
113
+ * Obtiene el triple de destino (target triple) para Rust
114
+ */
115
+ getRustTargetTriple() {
116
+ const platform2 = this.getPlatform();
117
+ const arch2 = this.getArchitecture();
118
+ const targetMap = {
119
+ "linux-x86_64": "x86_64-unknown-linux-gnu",
120
+ "linux-i686": "i686-unknown-linux-gnu",
121
+ "linux-aarch64": "aarch64-unknown-linux-gnu",
122
+ "linux-armv7": "armv7-unknown-linux-gnueabihf",
123
+ "macos-x86_64": "x86_64-apple-darwin",
124
+ "macos-aarch64": "aarch64-apple-darwin",
125
+ "windows-x86_64": "x86_64-pc-windows-msvc",
126
+ "windows-i686": "i686-pc-windows-msvc",
127
+ "windows-aarch64": "aarch64-pc-windows-msvc",
128
+ "freebsd-x86_64": "x86_64-unknown-freebsd"
129
+ };
130
+ const key = `${platform2}-${arch2}`;
131
+ return targetMap[key] || `${arch2}-unknown-${platform2}`;
132
+ }
133
+ /**
134
+ * Muestra información detallada del sistema
135
+ */
136
+ printSystemInfo() {
137
+ console.log("\u{1F5A5}\uFE0F System Information:");
138
+ console.log("\u251C\u2500 Platform:", this.getPlatform());
139
+ console.log("\u251C\u2500 Arquitecture:", this.getArchitecture());
140
+ console.log("\u251C\u2500 OS Type:", this.systemInfo.type);
141
+ console.log("\u251C\u2500 OS Release:", this.systemInfo.release);
142
+ console.log("\u251C\u2500 Endianness:", this.systemInfo.endianness);
143
+ console.log("\u251C\u2500 CPUs:", this.systemInfo.cpus);
144
+ console.log("\u2514\u2500 Rust Target:", this.getRustTargetTriple());
145
+ }
146
+ };
147
+
148
+ // src/lib/Donwloader.ts
149
+ var fs = __toESM(require("fs"));
150
+ var path = __toESM(require("path"));
151
+ var os2 = __toESM(require("os"));
152
+ var import_follow_redirects = require("follow-redirects");
153
+ var unzipper = __toESM(require("unzipper"));
154
+ var Downloader = class {
155
+ static get(prefix) {
156
+ const arch2 = new Arquitecture();
157
+ const platform2 = arch2.getPlatform();
158
+ const architecture = arch2.getArchitecture();
159
+ const platformMap = {
160
+ windows: "windows",
161
+ linux: "linux",
162
+ darwin: "macos"
163
+ };
164
+ const archMap = {
165
+ x86_64: "x64",
166
+ arm64: "arm64"
167
+ };
168
+ const plat = platformMap[platform2];
169
+ const archSuffix = archMap[architecture];
170
+ if (plat && archSuffix) {
171
+ const baseName = `${prefix}-engine-${plat}-${archSuffix}`;
172
+ const binaryName = platform2 === "windows" ? `${baseName}.exe` : baseName;
173
+ const url = `https://github.com/Dbcube/binaries/releases/download/${prefix}-engine/${prefix}-engine-latest-${plat}-${archSuffix}.zip`;
174
+ return {
175
+ name: binaryName,
176
+ url,
177
+ query_engine: binaryName,
178
+ schema_engine: `${prefix}-engine-${plat}-${archSuffix}${platform2 === "windows" ? ".exe" : ""}`
179
+ };
180
+ }
181
+ return {
182
+ name: "",
183
+ url: "",
184
+ query_engine: "",
185
+ schema_engine: ""
186
+ };
187
+ }
188
+ static async download() {
189
+ const binaries = ["schema", "query", "sqlite"];
190
+ const binDir = path.resolve(__dirname, "..", "bin");
191
+ fs.mkdirSync(binDir, { recursive: true });
192
+ for (const prefix of binaries) {
193
+ try {
194
+ console.log(`==> Empezando descarga para: ${prefix}`);
195
+ const binaryInfo = this.get(prefix);
196
+ console.log(`Descargando: ${binaryInfo.name}`);
197
+ console.log(`URL: ${binaryInfo.url}`);
198
+ if (!binaryInfo.name) {
199
+ throw new Error("Unsupported platform or architecture");
200
+ }
201
+ const tempZipPath = path.join(os2.tmpdir(), `binary-${prefix}-${Date.now()}.zip`);
202
+ const finalBinaryPath = path.join(binDir, binaryInfo.name);
203
+ if (fs.existsSync(finalBinaryPath)) {
204
+ console.log(`\u26A0\uFE0F El binario ya existe, omitiendo: ${finalBinaryPath}`);
205
+ continue;
206
+ }
207
+ await new Promise((resolve2, reject) => {
208
+ console.log(`Iniciando descarga de ${prefix}...`);
209
+ const request = import_follow_redirects.https.get(binaryInfo.url, (response) => {
210
+ console.log(`HTTP ${response.statusCode} para ${prefix}`);
211
+ if (response.statusCode === 302 || response.statusCode === 301) {
212
+ const redirectUrl = response.headers.location;
213
+ if (redirectUrl) {
214
+ console.log(`Redirigiendo a: ${redirectUrl}`);
215
+ import_follow_redirects.https.get(redirectUrl, handleResponse);
216
+ return;
217
+ }
218
+ }
219
+ if (response.statusCode !== 200) {
220
+ reject(new Error(`HTTP ${response.statusCode} para ${prefix}`));
221
+ return;
222
+ }
223
+ handleResponse(response);
224
+ });
225
+ function handleResponse(response) {
226
+ const file = fs.createWriteStream(tempZipPath);
227
+ const totalBytes = parseInt(response.headers["content-length"] || "0", 10);
228
+ let downloadedBytes = 0;
229
+ console.log(`Descargando ${(totalBytes / 1024 / 1024).toFixed(1)}MB para ${prefix}...`);
230
+ response.on("data", (chunk) => {
231
+ downloadedBytes += chunk.length;
232
+ file.write(chunk);
233
+ });
234
+ response.on("end", () => {
235
+ file.end();
236
+ console.log(`\u2705 Descarga completada para ${prefix}`);
237
+ resolve2();
238
+ });
239
+ response.on("error", (err) => {
240
+ file.close();
241
+ try {
242
+ fs.unlinkSync(tempZipPath);
243
+ } catch {
244
+ }
245
+ reject(err);
246
+ });
247
+ file.on("error", (err) => {
248
+ file.close();
249
+ try {
250
+ fs.unlinkSync(tempZipPath);
251
+ } catch {
252
+ }
253
+ reject(err);
254
+ });
255
+ }
256
+ request.on("error", (err) => {
257
+ reject(err);
258
+ });
259
+ request.setTimeout(12e4, () => {
260
+ request.destroy();
261
+ reject(new Error(`Timeout descargando ${prefix}`));
262
+ });
263
+ });
264
+ console.log(`Zip descargado para ${prefix}, extrayendo...`);
265
+ await new Promise((resolve2, reject) => {
266
+ let extracted = false;
267
+ fs.createReadStream(tempZipPath).pipe(unzipper.Parse()).on("entry", (entry) => {
268
+ const fileName = entry.path;
269
+ const type2 = entry.type;
270
+ console.log(`Encontrado en ZIP: ${fileName} (${type2})`);
271
+ if (type2 === "File" && !extracted) {
272
+ extracted = true;
273
+ const writeStream = fs.createWriteStream(finalBinaryPath);
274
+ entry.pipe(writeStream);
275
+ writeStream.on("finish", () => {
276
+ if (process.platform !== "win32") {
277
+ fs.chmodSync(finalBinaryPath, 493);
278
+ }
279
+ try {
280
+ fs.unlinkSync(tempZipPath);
281
+ } catch {
282
+ }
283
+ console.log(`Binario extra\xEDdo y guardado: ${finalBinaryPath}`);
284
+ resolve2();
285
+ });
286
+ writeStream.on("error", (err) => {
287
+ try {
288
+ fs.unlinkSync(tempZipPath);
289
+ } catch {
290
+ }
291
+ reject(err);
292
+ });
293
+ } else {
294
+ entry.autodrain();
295
+ }
296
+ }).on("error", (err) => {
297
+ try {
298
+ fs.unlinkSync(tempZipPath);
299
+ } catch {
300
+ }
301
+ reject(err);
302
+ }).on("close", () => {
303
+ if (!extracted) {
304
+ try {
305
+ fs.unlinkSync(tempZipPath);
306
+ } catch {
307
+ }
308
+ reject(new Error(`No se encontr\xF3 ning\xFAn archivo v\xE1lido en el ZIP para ${prefix}`));
309
+ }
310
+ });
311
+ });
312
+ console.log(`==> Finaliz\xF3 descarga y extracci\xF3n para: ${prefix}`);
313
+ } catch (error) {
314
+ const errorMessage = error instanceof Error ? error.message : "Error desconocido";
315
+ console.error(`Error descargando binario ${prefix}:`, errorMessage);
316
+ throw error;
317
+ }
318
+ }
319
+ }
320
+ };
321
+
322
+ // src/bin.ts
323
+ async function main() {
324
+ const args = process.argv.slice(2);
325
+ const command = args[0];
326
+ switch (command) {
327
+ case "install":
328
+ case "download":
329
+ console.log("\u{1F680} Iniciando descarga de binarios DBCube...");
330
+ try {
331
+ await Downloader.download();
332
+ console.log("\u2705 \xA1Todos los binarios descargados exitosamente!");
333
+ } catch (error) {
334
+ console.error("\u274C Error descargando binarios:", error);
335
+ process.exit(1);
336
+ }
337
+ break;
338
+ case "check":
339
+ console.log("\u{1F50D} Verificando binarios...");
340
+ const binaries = ["schema", "query", "sqlite"];
341
+ for (const prefix of binaries) {
342
+ const binary = Downloader.get(prefix);
343
+ console.log(`${prefix}-engine: ${binary.name}`);
344
+ console.log(` URL: ${binary.url}`);
345
+ }
346
+ break;
347
+ default:
348
+ console.log("DBCube Binary Manager");
349
+ console.log("");
350
+ console.log("Comandos disponibles:");
351
+ console.log(" install|download - Descargar todos los binarios");
352
+ console.log(" check - Verificar informaci\xF3n de binarios");
353
+ console.log("");
354
+ console.log("Uso:");
355
+ console.log(" npx @dbcube/core install");
356
+ console.log(" npx @dbcube/core check");
357
+ }
358
+ }
359
+ main().catch((error) => {
360
+ console.error("Error:", error);
361
+ process.exit(1);
362
+ });
363
+ //# sourceMappingURL=bin.cjs.map
@@ -0,0 +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"]}
package/dist/bin.d.mts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/bin.d.ts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/bin.js ADDED
@@ -0,0 +1,340 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/lib/Arquitecture.ts
4
+ import * as os from "os";
5
+ var Arquitecture = class {
6
+ systemInfo;
7
+ constructor() {
8
+ this.systemInfo = this.detectSystemInfo();
9
+ }
10
+ /**
11
+ * Detecta información completa del sistema
12
+ */
13
+ detectSystemInfo() {
14
+ return {
15
+ platform: os.platform(),
16
+ arch: os.arch(),
17
+ release: os.release(),
18
+ type: os.type(),
19
+ endianness: os.endianness(),
20
+ cpus: os.cpus().length
21
+ };
22
+ }
23
+ /**
24
+ * Obtiene la plataforma normalizada
25
+ */
26
+ getPlatform() {
27
+ const platform2 = this.systemInfo.platform;
28
+ switch (platform2) {
29
+ case "win32":
30
+ return "windows";
31
+ case "darwin":
32
+ return "macos";
33
+ case "linux":
34
+ return "linux";
35
+ case "freebsd":
36
+ return "freebsd";
37
+ case "openbsd":
38
+ return "openbsd";
39
+ case "sunos":
40
+ return "solaris";
41
+ default:
42
+ return platform2;
43
+ }
44
+ }
45
+ /**
46
+ * Obtiene la arquitectura normalizada
47
+ */
48
+ getArchitecture() {
49
+ const arch2 = this.systemInfo.arch;
50
+ switch (arch2) {
51
+ case "x64":
52
+ return "x86_64";
53
+ case "x32":
54
+ case "ia32":
55
+ return "i686";
56
+ case "arm64":
57
+ return "aarch64";
58
+ case "arm":
59
+ return "armv7";
60
+ case "ppc64":
61
+ return "powerpc64";
62
+ case "ppc":
63
+ return "powerpc";
64
+ case "s390x":
65
+ return "s390x";
66
+ case "mips":
67
+ return "mips";
68
+ case "mipsel":
69
+ return "mipsel";
70
+ default:
71
+ return arch2;
72
+ }
73
+ }
74
+ /**
75
+ * Genera el nombre del binario basado en la arquitectura
76
+ */
77
+ getBinaryName(baseName) {
78
+ const platform2 = this.getPlatform();
79
+ const arch2 = this.getArchitecture();
80
+ const extension = platform2 === "windows" ? ".exe" : "";
81
+ return `${baseName}-${platform2}-${arch2}${extension}`;
82
+ }
83
+ /**
84
+ * Obtiene información completa del sistema
85
+ */
86
+ getSystemInfo() {
87
+ return { ...this.systemInfo };
88
+ }
89
+ /**
90
+ * Obtiene el triple de destino (target triple) para Rust
91
+ */
92
+ getRustTargetTriple() {
93
+ const platform2 = this.getPlatform();
94
+ const arch2 = this.getArchitecture();
95
+ const targetMap = {
96
+ "linux-x86_64": "x86_64-unknown-linux-gnu",
97
+ "linux-i686": "i686-unknown-linux-gnu",
98
+ "linux-aarch64": "aarch64-unknown-linux-gnu",
99
+ "linux-armv7": "armv7-unknown-linux-gnueabihf",
100
+ "macos-x86_64": "x86_64-apple-darwin",
101
+ "macos-aarch64": "aarch64-apple-darwin",
102
+ "windows-x86_64": "x86_64-pc-windows-msvc",
103
+ "windows-i686": "i686-pc-windows-msvc",
104
+ "windows-aarch64": "aarch64-pc-windows-msvc",
105
+ "freebsd-x86_64": "x86_64-unknown-freebsd"
106
+ };
107
+ const key = `${platform2}-${arch2}`;
108
+ return targetMap[key] || `${arch2}-unknown-${platform2}`;
109
+ }
110
+ /**
111
+ * Muestra información detallada del sistema
112
+ */
113
+ printSystemInfo() {
114
+ console.log("\u{1F5A5}\uFE0F System Information:");
115
+ console.log("\u251C\u2500 Platform:", this.getPlatform());
116
+ console.log("\u251C\u2500 Arquitecture:", this.getArchitecture());
117
+ console.log("\u251C\u2500 OS Type:", this.systemInfo.type);
118
+ console.log("\u251C\u2500 OS Release:", this.systemInfo.release);
119
+ console.log("\u251C\u2500 Endianness:", this.systemInfo.endianness);
120
+ console.log("\u251C\u2500 CPUs:", this.systemInfo.cpus);
121
+ console.log("\u2514\u2500 Rust Target:", this.getRustTargetTriple());
122
+ }
123
+ };
124
+
125
+ // src/lib/Donwloader.ts
126
+ import * as fs from "fs";
127
+ import * as path from "path";
128
+ import * as os2 from "os";
129
+ import { https } from "follow-redirects";
130
+ import * as unzipper from "unzipper";
131
+ var Downloader = class {
132
+ static get(prefix) {
133
+ const arch2 = new Arquitecture();
134
+ const platform2 = arch2.getPlatform();
135
+ const architecture = arch2.getArchitecture();
136
+ const platformMap = {
137
+ windows: "windows",
138
+ linux: "linux",
139
+ darwin: "macos"
140
+ };
141
+ const archMap = {
142
+ x86_64: "x64",
143
+ arm64: "arm64"
144
+ };
145
+ const plat = platformMap[platform2];
146
+ const archSuffix = archMap[architecture];
147
+ if (plat && archSuffix) {
148
+ const baseName = `${prefix}-engine-${plat}-${archSuffix}`;
149
+ const binaryName = platform2 === "windows" ? `${baseName}.exe` : baseName;
150
+ const url = `https://github.com/Dbcube/binaries/releases/download/${prefix}-engine/${prefix}-engine-latest-${plat}-${archSuffix}.zip`;
151
+ return {
152
+ name: binaryName,
153
+ url,
154
+ query_engine: binaryName,
155
+ schema_engine: `${prefix}-engine-${plat}-${archSuffix}${platform2 === "windows" ? ".exe" : ""}`
156
+ };
157
+ }
158
+ return {
159
+ name: "",
160
+ url: "",
161
+ query_engine: "",
162
+ schema_engine: ""
163
+ };
164
+ }
165
+ static async download() {
166
+ const binaries = ["schema", "query", "sqlite"];
167
+ const binDir = path.resolve(__dirname, "..", "bin");
168
+ fs.mkdirSync(binDir, { recursive: true });
169
+ for (const prefix of binaries) {
170
+ try {
171
+ console.log(`==> Empezando descarga para: ${prefix}`);
172
+ const binaryInfo = this.get(prefix);
173
+ console.log(`Descargando: ${binaryInfo.name}`);
174
+ console.log(`URL: ${binaryInfo.url}`);
175
+ if (!binaryInfo.name) {
176
+ throw new Error("Unsupported platform or architecture");
177
+ }
178
+ const tempZipPath = path.join(os2.tmpdir(), `binary-${prefix}-${Date.now()}.zip`);
179
+ const finalBinaryPath = path.join(binDir, binaryInfo.name);
180
+ if (fs.existsSync(finalBinaryPath)) {
181
+ console.log(`\u26A0\uFE0F El binario ya existe, omitiendo: ${finalBinaryPath}`);
182
+ continue;
183
+ }
184
+ await new Promise((resolve2, reject) => {
185
+ console.log(`Iniciando descarga de ${prefix}...`);
186
+ const request = https.get(binaryInfo.url, (response) => {
187
+ console.log(`HTTP ${response.statusCode} para ${prefix}`);
188
+ if (response.statusCode === 302 || response.statusCode === 301) {
189
+ const redirectUrl = response.headers.location;
190
+ if (redirectUrl) {
191
+ console.log(`Redirigiendo a: ${redirectUrl}`);
192
+ https.get(redirectUrl, handleResponse);
193
+ return;
194
+ }
195
+ }
196
+ if (response.statusCode !== 200) {
197
+ reject(new Error(`HTTP ${response.statusCode} para ${prefix}`));
198
+ return;
199
+ }
200
+ handleResponse(response);
201
+ });
202
+ function handleResponse(response) {
203
+ const file = fs.createWriteStream(tempZipPath);
204
+ const totalBytes = parseInt(response.headers["content-length"] || "0", 10);
205
+ let downloadedBytes = 0;
206
+ console.log(`Descargando ${(totalBytes / 1024 / 1024).toFixed(1)}MB para ${prefix}...`);
207
+ response.on("data", (chunk) => {
208
+ downloadedBytes += chunk.length;
209
+ file.write(chunk);
210
+ });
211
+ response.on("end", () => {
212
+ file.end();
213
+ console.log(`\u2705 Descarga completada para ${prefix}`);
214
+ resolve2();
215
+ });
216
+ response.on("error", (err) => {
217
+ file.close();
218
+ try {
219
+ fs.unlinkSync(tempZipPath);
220
+ } catch {
221
+ }
222
+ reject(err);
223
+ });
224
+ file.on("error", (err) => {
225
+ file.close();
226
+ try {
227
+ fs.unlinkSync(tempZipPath);
228
+ } catch {
229
+ }
230
+ reject(err);
231
+ });
232
+ }
233
+ request.on("error", (err) => {
234
+ reject(err);
235
+ });
236
+ request.setTimeout(12e4, () => {
237
+ request.destroy();
238
+ reject(new Error(`Timeout descargando ${prefix}`));
239
+ });
240
+ });
241
+ console.log(`Zip descargado para ${prefix}, extrayendo...`);
242
+ await new Promise((resolve2, reject) => {
243
+ let extracted = false;
244
+ fs.createReadStream(tempZipPath).pipe(unzipper.Parse()).on("entry", (entry) => {
245
+ const fileName = entry.path;
246
+ const type2 = entry.type;
247
+ console.log(`Encontrado en ZIP: ${fileName} (${type2})`);
248
+ if (type2 === "File" && !extracted) {
249
+ extracted = true;
250
+ const writeStream = fs.createWriteStream(finalBinaryPath);
251
+ entry.pipe(writeStream);
252
+ writeStream.on("finish", () => {
253
+ if (process.platform !== "win32") {
254
+ fs.chmodSync(finalBinaryPath, 493);
255
+ }
256
+ try {
257
+ fs.unlinkSync(tempZipPath);
258
+ } catch {
259
+ }
260
+ console.log(`Binario extra\xEDdo y guardado: ${finalBinaryPath}`);
261
+ resolve2();
262
+ });
263
+ writeStream.on("error", (err) => {
264
+ try {
265
+ fs.unlinkSync(tempZipPath);
266
+ } catch {
267
+ }
268
+ reject(err);
269
+ });
270
+ } else {
271
+ entry.autodrain();
272
+ }
273
+ }).on("error", (err) => {
274
+ try {
275
+ fs.unlinkSync(tempZipPath);
276
+ } catch {
277
+ }
278
+ reject(err);
279
+ }).on("close", () => {
280
+ if (!extracted) {
281
+ try {
282
+ fs.unlinkSync(tempZipPath);
283
+ } catch {
284
+ }
285
+ reject(new Error(`No se encontr\xF3 ning\xFAn archivo v\xE1lido en el ZIP para ${prefix}`));
286
+ }
287
+ });
288
+ });
289
+ console.log(`==> Finaliz\xF3 descarga y extracci\xF3n para: ${prefix}`);
290
+ } catch (error) {
291
+ const errorMessage = error instanceof Error ? error.message : "Error desconocido";
292
+ console.error(`Error descargando binario ${prefix}:`, errorMessage);
293
+ throw error;
294
+ }
295
+ }
296
+ }
297
+ };
298
+
299
+ // src/bin.ts
300
+ async function main() {
301
+ const args = process.argv.slice(2);
302
+ const command = args[0];
303
+ switch (command) {
304
+ case "install":
305
+ case "download":
306
+ console.log("\u{1F680} Iniciando descarga de binarios DBCube...");
307
+ try {
308
+ await Downloader.download();
309
+ console.log("\u2705 \xA1Todos los binarios descargados exitosamente!");
310
+ } catch (error) {
311
+ console.error("\u274C Error descargando binarios:", error);
312
+ process.exit(1);
313
+ }
314
+ break;
315
+ case "check":
316
+ console.log("\u{1F50D} Verificando binarios...");
317
+ const binaries = ["schema", "query", "sqlite"];
318
+ for (const prefix of binaries) {
319
+ const binary = Downloader.get(prefix);
320
+ console.log(`${prefix}-engine: ${binary.name}`);
321
+ console.log(` URL: ${binary.url}`);
322
+ }
323
+ break;
324
+ default:
325
+ console.log("DBCube Binary Manager");
326
+ console.log("");
327
+ console.log("Comandos disponibles:");
328
+ console.log(" install|download - Descargar todos los binarios");
329
+ console.log(" check - Verificar informaci\xF3n de binarios");
330
+ console.log("");
331
+ console.log("Uso:");
332
+ console.log(" npx @dbcube/core install");
333
+ console.log(" npx @dbcube/core check");
334
+ }
335
+ }
336
+ main().catch((error) => {
337
+ console.error("Error:", error);
338
+ process.exit(1);
339
+ });
340
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +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"]}
package/dist/install.cjs CHANGED
@@ -204,22 +204,44 @@ var Downloader = class {
204
204
  continue;
205
205
  }
206
206
  await new Promise((resolve2, reject) => {
207
- const file = fs.createWriteStream(tempZipPath);
208
- import_follow_redirects.https.get(binaryInfo.url, (response) => {
209
- console.log(`Respuesta HTTP para ${prefix}: ${response.statusCode}`);
207
+ console.log(`Iniciando descarga de ${prefix}...`);
208
+ const request = import_follow_redirects.https.get(binaryInfo.url, (response) => {
209
+ console.log(`HTTP ${response.statusCode} para ${prefix}`);
210
+ if (response.statusCode === 302 || response.statusCode === 301) {
211
+ const redirectUrl = response.headers.location;
212
+ if (redirectUrl) {
213
+ console.log(`Redirigiendo a: ${redirectUrl}`);
214
+ import_follow_redirects.https.get(redirectUrl, handleResponse);
215
+ return;
216
+ }
217
+ }
210
218
  if (response.statusCode !== 200) {
219
+ reject(new Error(`HTTP ${response.statusCode} para ${prefix}`));
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) => {
211
239
  file.close();
212
240
  try {
213
241
  fs.unlinkSync(tempZipPath);
214
242
  } catch {
215
243
  }
216
- reject(new Error(`Failed to download file: ${response.statusCode}`));
217
- return;
218
- }
219
- response.pipe(file);
220
- file.on("finish", () => {
221
- file.close();
222
- resolve2();
244
+ reject(err);
223
245
  });
224
246
  file.on("error", (err) => {
225
247
  file.close();
@@ -229,14 +251,14 @@ var Downloader = class {
229
251
  }
230
252
  reject(err);
231
253
  });
232
- }).on("error", (err) => {
233
- file.close();
234
- try {
235
- fs.unlinkSync(tempZipPath);
236
- } catch {
237
- }
254
+ }
255
+ request.on("error", (err) => {
238
256
  reject(err);
239
257
  });
258
+ request.setTimeout(12e4, () => {
259
+ request.destroy();
260
+ reject(new Error(`Timeout descargando ${prefix}`));
261
+ });
240
262
  });
241
263
  console.log(`Zip descargado para ${prefix}, extrayendo...`);
242
264
  await new Promise((resolve2, reject) => {
@@ -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\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', '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 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"]}
package/dist/install.js CHANGED
@@ -180,22 +180,44 @@ var Downloader = class {
180
180
  continue;
181
181
  }
182
182
  await new Promise((resolve2, reject) => {
183
- const file = fs.createWriteStream(tempZipPath);
184
- https.get(binaryInfo.url, (response) => {
185
- console.log(`Respuesta HTTP para ${prefix}: ${response.statusCode}`);
183
+ console.log(`Iniciando descarga de ${prefix}...`);
184
+ const request = https.get(binaryInfo.url, (response) => {
185
+ console.log(`HTTP ${response.statusCode} para ${prefix}`);
186
+ if (response.statusCode === 302 || response.statusCode === 301) {
187
+ const redirectUrl = response.headers.location;
188
+ if (redirectUrl) {
189
+ console.log(`Redirigiendo a: ${redirectUrl}`);
190
+ https.get(redirectUrl, handleResponse);
191
+ return;
192
+ }
193
+ }
186
194
  if (response.statusCode !== 200) {
195
+ reject(new Error(`HTTP ${response.statusCode} para ${prefix}`));
196
+ return;
197
+ }
198
+ handleResponse(response);
199
+ });
200
+ function handleResponse(response) {
201
+ const file = fs.createWriteStream(tempZipPath);
202
+ const totalBytes = parseInt(response.headers["content-length"] || "0", 10);
203
+ let downloadedBytes = 0;
204
+ console.log(`Descargando ${(totalBytes / 1024 / 1024).toFixed(1)}MB para ${prefix}...`);
205
+ response.on("data", (chunk) => {
206
+ downloadedBytes += chunk.length;
207
+ file.write(chunk);
208
+ });
209
+ response.on("end", () => {
210
+ file.end();
211
+ console.log(`\u2705 Descarga completada para ${prefix}`);
212
+ resolve2();
213
+ });
214
+ response.on("error", (err) => {
187
215
  file.close();
188
216
  try {
189
217
  fs.unlinkSync(tempZipPath);
190
218
  } catch {
191
219
  }
192
- reject(new Error(`Failed to download file: ${response.statusCode}`));
193
- return;
194
- }
195
- response.pipe(file);
196
- file.on("finish", () => {
197
- file.close();
198
- resolve2();
220
+ reject(err);
199
221
  });
200
222
  file.on("error", (err) => {
201
223
  file.close();
@@ -205,14 +227,14 @@ var Downloader = class {
205
227
  }
206
228
  reject(err);
207
229
  });
208
- }).on("error", (err) => {
209
- file.close();
210
- try {
211
- fs.unlinkSync(tempZipPath);
212
- } catch {
213
- }
230
+ }
231
+ request.on("error", (err) => {
214
232
  reject(err);
215
233
  });
234
+ request.setTimeout(12e4, () => {
235
+ request.destroy();
236
+ reject(new Error(`Timeout descargando ${prefix}`));
237
+ });
216
238
  });
217
239
  console.log(`Zip descargado para ${prefix}, extrayendo...`);
218
240
  await new Promise((resolve2, reject) => {
@@ -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\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', '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 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dbcube/core",
3
- "version": "1.0.23",
3
+ "version": "1.0.24",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",
@@ -9,6 +9,9 @@
9
9
  "import": "./dist/index.js",
10
10
  "require": "./dist/index.cjs"
11
11
  },
12
+ "bin": {
13
+ "dbcube-core": "dist/bin.cjs"
14
+ },
12
15
  "scripts": {
13
16
  "build": "tsup",
14
17
  "postinstall": "node dist/install.cjs"