@codemastersolutions/db-utility 0.0.10 → 0.0.12

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/README.es.md CHANGED
@@ -25,6 +25,15 @@ npm install @codemastersolutions/db-utility
25
25
  npm install -g @codemastersolutions/db-utility
26
26
  ```
27
27
 
28
+ ## Uso de Internet
29
+
30
+ Esta librería utiliza su conexión a internet para buscar actualizaciones en el registro npm. Esta verificación se realiza automáticamente (predeterminado: diariamente) cuando ejecuta un comando de la CLI.
31
+
32
+ - **Tiempo de espera**: La verificación tiene un tiempo de espera de 10 segundos.
33
+ - **Sin conexión**: Si no se detecta conexión a internet, la verificación se omite silenciosamente.
34
+ - **Privacidad**: No se recopilan datos personales. Solo se compara la versión del paquete.
35
+ - **Configuración**: Puede desactivar esta función o cambiar la frecuencia en el archivo de configuración.
36
+
28
37
  ## Configuración
29
38
 
30
39
  ### Inicialización
@@ -50,6 +59,10 @@ El archivo de configuración permite definir el idioma de la CLI, directorios de
50
59
  ```json
51
60
  {
52
61
  "language": "es",
62
+ "versionCheck": {
63
+ "enabled": true,
64
+ "frequency": "daily"
65
+ },
53
66
  "introspection": {
54
67
  "outputDir": "db-utility-introspect"
55
68
  },
@@ -57,10 +70,7 @@ El archivo de configuración permite definir el idioma de la CLI, directorios de
57
70
  "outputDir": "db-utility-migrations",
58
71
  "fileNamePattern": "timestamp-prefix",
59
72
  "data": true,
60
- "dataTables": [
61
- "usuarios",
62
- { "table": "logs", "where": "nivel = 'ERROR'" }
63
- ],
73
+ "dataTables": ["usuarios", { "table": "logs", "where": "nivel = 'ERROR'" }],
64
74
  "backup": true
65
75
  },
66
76
  "connection": {
@@ -94,17 +104,36 @@ El archivo de configuración permite definir el idioma de la CLI, directorios de
94
104
  }
95
105
  ```
96
106
 
107
+ ### Configuración de Verificación de Versión
108
+
109
+ Puede configurar la verificación automática de versión en `dbutility.config.json`.
110
+
111
+ ```json
112
+ {
113
+ "versionCheck": {
114
+ "enabled": true,
115
+ "frequency": "daily"
116
+ }
117
+ }
118
+ ```
119
+
120
+ - **`enabled`** (boolean): Establezca en `true` para habilitar la verificación de versión, `false` para deshabilitarla. Predeterminado: `true`.
121
+ - **`frequency`** (string): Con qué frecuencia verificar actualizaciones.
122
+ - `"daily"`: Una vez al día (predeterminado).
123
+ - `"weekly"`: Una vez a la semana.
124
+ - `"monthly"`: Una vez al mes.
125
+
97
126
  ### Configuración Avanzada de Extracción de Datos
98
127
 
99
128
  La opción `dataTables` permite especificar qué tablas deben tener sus datos exportados (para seeds). Puede proporcionar una lista simple de nombres de tablas o un objeto con una cláusula `where` para filtrar los datos.
100
129
 
101
130
  ```json
102
131
  "dataTables": [
103
- "roles",
132
+ "roles",
104
133
  "permisos",
105
- {
106
- "table": "usuarios",
107
- "where": "activo = 1 AND creado_en > '2023-01-01'"
134
+ {
135
+ "table": "usuarios",
136
+ "where": "activo = 1 AND creado_en > '2023-01-01'"
108
137
  },
109
138
  {
110
139
  "table": "registros",
@@ -118,6 +147,7 @@ La opción `dataTables` permite especificar qué tablas deben tener sus datos ex
118
147
  Puede definir múltiples conexiones dentro de la propiedad `connections` y utilizarlas en la CLI con el flag `--conn <nombre>`.
119
148
 
120
149
  Ejemplo:
150
+
121
151
  ```bash
122
152
  dbutility connect --conn desarrollo
123
153
  ```
@@ -171,26 +201,26 @@ DB_NAME=mibasedatos
171
201
 
172
202
  ### Opciones Globales
173
203
 
174
- | Flag | Descripción |
175
- |------|-------------|
176
- | `--init` | Inicializa el archivo de configuración |
177
- | `-f, --force` | Fuerza la recreación del archivo de configuración si ya existe |
178
- | `-v, --version` | Muestra el número de la versión |
179
- | `-h, --help` | Muestra ayuda para el comando |
180
-
181
- ### Opciones de Conexión (Disponibles para `connect`, `introspect`, `export`, `migrate`)
182
-
183
- | Flag | Descripción |
184
- |------|-------------|
185
- | `--conn <name>` | Nombre de la conexión definida en el archivo de configuración |
186
- | `-c, --config <path>` | Ruta al archivo de configuración |
187
- | `-t, --type <type>` | Tipo de base de datos (`mysql`, `postgres`, `mssql`) |
188
- | `-H, --host <host>` | Host de la base de datos |
189
- | `-P, --port <port>` | Puerto de la base de datos |
190
- | `-u, --username <username>` | Usuario de la base de datos |
191
- | `-p, --password <password>` | Contraseña de la base de datos |
192
- | `-d, --database <database>` | Nombre de la base de datos |
193
- | `--ssl` | Habilita conexión SSL |
204
+ | Flag | Descripción |
205
+ | --------------- | -------------------------------------------------------------- |
206
+ | `--init` | Inicializa el archivo de configuración |
207
+ | `-f, --force` | Fuerza la recreación del archivo de configuración si ya existe |
208
+ | `-v, --version` | Muestra el número de la versión |
209
+ | `-h, --help` | Muestra ayuda para el comando |
210
+
211
+ ### Opciones de Conexión (Disponibles para `connect`, `introspect`, `models`, `migrations`)
212
+
213
+ | Flag | Descripción |
214
+ | --------------------------- | ------------------------------------------------------------- |
215
+ | `--conn <name>` | Nombre de la conexión definida en el archivo de configuración |
216
+ | `-c, --config <path>` | Ruta al archivo de configuración |
217
+ | `-t, --type <type>` | Tipo de base de datos (`mysql`, `postgres`, `mssql`) |
218
+ | `-H, --host <host>` | Host de la base de datos |
219
+ | `-P, --port <port>` | Puerto de la base de datos |
220
+ | `-u, --username <username>` | Usuario de la base de datos |
221
+ | `-p, --password <password>` | Contraseña de la base de datos |
222
+ | `-d, --database <database>` | Nombre de la base de datos |
223
+ | `--ssl` | Habilita conexión SSL |
194
224
 
195
225
  ### Comandos
196
226
 
@@ -210,18 +240,19 @@ Realiza introspección en el esquema de la base de datos.
210
240
  dbutility introspect [opciones-conexión]
211
241
  ```
212
242
 
213
- #### `export`
243
+ #### `models`
214
244
 
215
245
  Exporta modelos para el ORM objetivo.
216
246
 
217
247
  ```bash
218
- dbutility export --target <orm> [opciones] [opciones-conexión]
248
+ dbutility models --target <orm> [opciones] [opciones-conexión]
219
249
  ```
220
250
 
221
- | Flag | Descripción | Obligatorio |
222
- |------|-------------|-------------|
223
- | `--target <target>` | ORM objetivo (`sequelize`, `typeorm`, `prisma`, `mongoose`) | Sí |
224
- | `--output <dir>` | Directorio de salida | No |
251
+ | Flag | Descripción | Obligatorio |
252
+ | ------------------- | ----------------------------------------------------------- | ----------- |
253
+ | `--target <target>` | ORM objetivo (`sequelize`, `typeorm`, `prisma`, `mongoose`) | Sí |
254
+ | `--output <dir>` | Directorio de salida | No |
255
+ | `--test` | Ejecuta pruebas en los modelos generados | No |
225
256
 
226
257
  #### `migrations`
227
258
 
@@ -231,13 +262,14 @@ Genera migraciones a partir del esquema de la base de datos.
231
262
  dbutility migrations --target <orm> [opciones] [opciones-conexión]
232
263
  ```
233
264
 
234
- | Flag | Descripción | Obligatorio |
235
- |------|-------------|-------------|
236
- | `--target <target>` | ORM objetivo (`sequelize`, `typeorm`) | Sí |
237
- | `--output <dir>` | Directorio de salida | No |
238
- | `--data` | Genera migración de datos (seeds) junto con el esquema (Sobrescribe configuración) | No |
239
- | `--only-data` | Genera SOLO migración de datos | No |
265
+ | Flag | Descripción | Obligatorio |
266
+ | ------------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
267
+ | `--target <target>` | ORM objetivo (`sequelize`, `typeorm`) | Sí |
268
+ | `--output <dir>` | Directorio de salida | No |
269
+ | `--data` | Genera migración de datos (seeds) junto con el esquema (Sobrescribe configuración) | No |
270
+ | `--only-data` | Genera SOLO migración de datos | No |
240
271
  | `--tables <tables>` | Lista de tablas separadas por coma para exportación de datos (Sobrescribe configuración) | Sí (si `--data` o `--only-data` y no está en la configuración) |
272
+ | `--test` | Ejecuta el comando test después de la generación de migraciones | No |
241
273
 
242
274
  #### `test`
243
275
 
@@ -247,36 +279,47 @@ Prueba migraciones generadas en contenedores Docker.
247
279
  dbutility test --target <orm> [opciones]
248
280
  ```
249
281
 
250
- | Flag | Descripción | Obligatorio |
251
- |------|-------------|-------------|
252
- | `--target <target>` | ORM objetivo (`sequelize`, `typeorm`) | Sí |
253
- | `--dir <dir>` | Directorio conteniendo las migraciones | No |
254
- | `--engines <engines>` | Imágenes Docker para probar (ej: `postgres:14,mysql:8`) | No |
255
- | `--backup` | Exporta backup de la base de datos del contenedor después de la prueba (Sobrescribe configuración) | No |
282
+ | Flag | Descripción | Obligatorio |
283
+ | --------------------- | -------------------------------------------------------------------------------------------------- | ----------- |
284
+ | `--target <target>` | ORM objetivo (`sequelize`, `typeorm`) | Sí |
285
+ | `--dir <dir>` | Directorio conteniendo las migraciones | No |
286
+ | `--engines <engines>` | Imágenes Docker para probar (ej: `postgres:14,mysql:8`) | No |
287
+ | `--backup` | Exporta backup de la base de datos del contenedor después de la prueba (Sobrescribe configuración) | No |
256
288
 
257
289
  ## Ejemplos de Uso
258
290
 
259
291
  ### Conectar a una base de datos usando una conexión con nombre
292
+
260
293
  ```bash
261
294
  dbutility connect --conn produccion
262
295
  ```
263
296
 
264
297
  ### Realizar introspección de una base de datos usando parámetros de conexión en línea
298
+
265
299
  ```bash
266
300
  dbutility introspect --type postgres --host localhost --username usuario --password contrasena --database mibasedatos
267
301
  ```
268
302
 
269
303
  ### Exportar modelos de Sequelize desde una conexión específica
304
+
270
305
  ```bash
271
- dbutility export --target sequelize --conn desarrollo --output ./src/models
306
+ dbutility models --target sequelize --conn desarrollo --output ./src/models
307
+ ```
308
+
309
+ ### Exportar modelos y ejecutar pruebas
310
+
311
+ ```bash
312
+ dbutility models --target sequelize --conn desarrollo --test
272
313
  ```
273
314
 
274
315
  ### Generar migraciones de TypeORM desde una conexión específica
316
+
275
317
  ```bash
276
318
  dbutility migrations --target typeorm --conn produccion
277
319
  ```
278
320
 
279
321
  ### Generar Migraciones de Datos (Seeds)
322
+
280
323
  ```bash
281
324
  dbutility migrations --target sequelize --conn desarrollo --data --tables "usuarios,roles"
282
325
  ```
package/README.md CHANGED
@@ -25,6 +25,15 @@ npm install @codemastersolutions/db-utility
25
25
  npm install -g @codemastersolutions/db-utility
26
26
  ```
27
27
 
28
+ ## Internet Usage
29
+
30
+ This library uses your internet connection to check for updates on the npm registry. This check is performed automatically (default: daily) when you execute a CLI command.
31
+
32
+ - **Timeout**: The check has a 10-second timeout.
33
+ - **Offline**: If no internet connection is detected, the check is silently skipped.
34
+ - **Privacy**: No personal data is collected. Only the package version is compared.
35
+ - **Configuration**: You can disable this feature or change the frequency in the configuration file.
36
+
28
37
  ## Configuration
29
38
 
30
39
  ### Initialization
@@ -50,6 +59,10 @@ The configuration file allows you to define CLI language, output directories, na
50
59
  ```json
51
60
  {
52
61
  "language": "en",
62
+ "versionCheck": {
63
+ "enabled": true,
64
+ "frequency": "daily"
65
+ },
53
66
  "introspection": {
54
67
  "outputDir": "db-utility-introspect"
55
68
  },
@@ -91,6 +104,25 @@ The configuration file allows you to define CLI language, output directories, na
91
104
  }
92
105
  ```
93
106
 
107
+ ### Version Check Configuration
108
+
109
+ You can configure the automatic version check in `dbutility.config.json`.
110
+
111
+ ```json
112
+ {
113
+ "versionCheck": {
114
+ "enabled": true,
115
+ "frequency": "daily"
116
+ }
117
+ }
118
+ ```
119
+
120
+ - **`enabled`** (boolean): Set to `true` to enable version checking, `false` to disable it. Default: `true`.
121
+ - **`frequency`** (string): How often to check for updates.
122
+ - `"daily"`: Once a day (default).
123
+ - `"weekly"`: Once a week.
124
+ - `"monthly"`: Once a month.
125
+
94
126
  ### Advanced Data Extraction Configuration
95
127
 
96
128
  The `dataTables` option allows you to specify which tables should have their data exported (for seeds). You can provide a simple list of table names or an object with a `where` clause to filter the data.
@@ -183,7 +215,7 @@ DB_NAME=mydb
183
215
  | `-v, --version` | Output the version number |
184
216
  | `-h, --help` | Display help for command |
185
217
 
186
- ### Connection Options (Available for `connect`, `introspect`, `export`, `migrate`)
218
+ ### Connection Options (Available for `connect`, `introspect`, `models`, `migrations`)
187
219
 
188
220
  | Flag | Description |
189
221
  | --------------------------- | --------------------------------------------- |
@@ -215,18 +247,19 @@ Introspect database schema.
215
247
  dbutility introspect [connection-options]
216
248
  ```
217
249
 
218
- #### `export`
250
+ #### `models`
219
251
 
220
252
  Export models for target ORM.
221
253
 
222
254
  ```bash
223
- dbutility export --target <orm> [options] [connection-options]
255
+ dbutility models --target <orm> [options] [connection-options]
224
256
  ```
225
257
 
226
258
  | Flag | Description | Required |
227
259
  | ------------------- | --------------------------------------------------------- | -------- |
228
260
  | `--target <target>` | Target ORM (`sequelize`, `typeorm`, `prisma`, `mongoose`) | Yes |
229
261
  | `--output <dir>` | Output directory | No |
262
+ | `--test` | Run tests on generated models | No |
230
263
 
231
264
  #### `migrations`
232
265
 
@@ -243,6 +276,7 @@ dbutility migrations --target <orm> [options] [connection-options]
243
276
  | `--data` | Generate data migration (seeds) along with schema (Overrides config) | No |
244
277
  | `--only-data` | Generate ONLY data migrations | No |
245
278
  | `--tables <tables>` | Comma-separated list of tables for data export (Overrides config) | Yes (if `--data` or `--only-data` and not in config) |
279
+ | `--test` | Run test command after migration generation | No |
246
280
 
247
281
  #### `test`
248
282
 
@@ -276,7 +310,13 @@ dbutility introspect --type postgres --host localhost --username myuser --passwo
276
310
  ### Export Sequelize models from a specific connection
277
311
 
278
312
  ```bash
279
- dbutility export --target sequelize --conn development --output ./src/models
313
+ dbutility models --target sequelize --conn development --output ./src/models
314
+ ```
315
+
316
+ ### Export models and run tests
317
+
318
+ ```bash
319
+ dbutility models --target sequelize --conn development --test
280
320
  ```
281
321
 
282
322
  ### Generate TypeORM migrations from a specific connection
package/README.pt-BR.md CHANGED
@@ -25,6 +25,15 @@ npm install @codemastersolutions/db-utility
25
25
  npm install -g @codemastersolutions/db-utility
26
26
  ```
27
27
 
28
+ ## Uso de Internet
29
+
30
+ Esta biblioteca utiliza sua conexão com a internet para verificar atualizações no registro npm. Esta verificação é realizada automaticamente (padrão: diariamente) quando você executa um comando da CLI.
31
+
32
+ - **Timeout**: A verificação tem um tempo limite de 10 segundos.
33
+ - **Offline**: Se nenhuma conexão com a internet for detectada, a verificação é ignorada silenciosamente.
34
+ - **Privacidade**: Nenhum dado pessoal é coletado. Apenas a versão do pacote é comparada.
35
+ - **Configuração**: Você pode desativar este recurso ou alterar a frequência no arquivo de configuração.
36
+
28
37
  ## Configuração
29
38
 
30
39
  ### Inicialização
@@ -50,6 +59,10 @@ O arquivo de configuração permite definir o idioma da CLI, diretórios de saí
50
59
  ```json
51
60
  {
52
61
  "language": "pt-BR",
62
+ "versionCheck": {
63
+ "enabled": true,
64
+ "frequency": "daily"
65
+ },
53
66
  "introspection": {
54
67
  "outputDir": "db-utility-introspect"
55
68
  },
@@ -91,6 +104,25 @@ O arquivo de configuração permite definir o idioma da CLI, diretórios de saí
91
104
  }
92
105
  ```
93
106
 
107
+ ### Configuração de Verificação de Versão
108
+
109
+ Você pode configurar a verificação automática de versão no `dbutility.config.json`.
110
+
111
+ ```json
112
+ {
113
+ "versionCheck": {
114
+ "enabled": true,
115
+ "frequency": "daily"
116
+ }
117
+ }
118
+ ```
119
+
120
+ - **`enabled`** (boolean): Defina como `true` para ativar a verificação de versão, `false` para desativar. Padrão: `true`.
121
+ - **`frequency`** (string): Com que frequência verificar atualizações.
122
+ - `"daily"`: Uma vez por dia (padrão).
123
+ - `"weekly"`: Uma vez por semana.
124
+ - `"monthly"`: Uma vez por mês.
125
+
94
126
  ### Configuração Avançada de Extração de Dados
95
127
 
96
128
  A opção `dataTables` permite especificar quais tabelas devem ter seus dados exportados (para seeds). Você pode fornecer uma lista simples de nomes de tabelas ou um objeto com uma cláusula `where` para filtrar os dados.
@@ -183,7 +215,7 @@ DB_NAME=meubanco
183
215
  | `-v, --version` | Exibe o número da versão |
184
216
  | `-h, --help` | Exibe ajuda para o comando |
185
217
 
186
- ### Opções de Conexão (Disponíveis para `connect`, `introspect`, `export`, `migration`)
218
+ ### Opções de Conexão (Disponíveis para `connect`, `introspect`, `models`, `migrations`)
187
219
 
188
220
  | Flag | Descrição |
189
221
  | --------------------------- | ----------------------------------------------------- |
@@ -215,18 +247,19 @@ Faz introspecção no esquema do banco de dados.
215
247
  dbutility introspect [opções-conexão]
216
248
  ```
217
249
 
218
- #### `export`
250
+ #### `models`
219
251
 
220
252
  Exporta modelos para o ORM alvo.
221
253
 
222
254
  ```bash
223
- dbutility export --target <orm> [opções] [opções-conexão]
255
+ dbutility models --target <orm> [opções] [opções-conexão]
224
256
  ```
225
257
 
226
258
  | Flag | Descrição | Obrigatório |
227
259
  | ------------------- | ------------------------------------------------------- | ----------- |
228
260
  | `--target <target>` | ORM alvo (`sequelize`, `typeorm`, `prisma`, `mongoose`) | Sim |
229
261
  | `--output <dir>` | Diretório de saída | Não |
262
+ | `--test` | Executa testes nos models gerados | Não |
230
263
 
231
264
  #### `migrations`
232
265
 
@@ -243,6 +276,7 @@ dbutility migrations --target <orm> [opções] [opções-conexão]
243
276
  | `--data` | Gera migração de dados (seeds) junto com o esquema (Sobrescreve configuração) | Não |
244
277
  | `--only-data` | Gera APENAS migração de dados | Não |
245
278
  | `--tables <tables>` | Lista de tabelas separadas por vírgula para exportação de dados (Sobrescreve configuração) | Sim (se `--data` ou `--only-data` e não estiver na configuração) |
279
+ | `--test` | Executa o comando test após a geração das migrações | Não |
246
280
 
247
281
  #### `test`
248
282
 
@@ -276,7 +310,13 @@ dbutility introspect --type postgres --host localhost --username usuario --passw
276
310
  ### Exportar modelos do Sequelize de uma conexão específica
277
311
 
278
312
  ```bash
279
- dbutility export --target sequelize --conn desenvolvimento --output ./src/models
313
+ dbutility models --target sequelize --conn desenvolvimento --output ./src/models
314
+ ```
315
+
316
+ ### Exportar models e executar testes
317
+
318
+ ```bash
319
+ dbutility models --target sequelize --conn desenvolvimento --test
280
320
  ```
281
321
 
282
322
  ### Gerar migrações do TypeORM de uma conexão específica
@@ -0,0 +1,21 @@
1
+ import { VersionCheckConfig } from '../config/AppConfig';
2
+ export declare class VersionChecker {
3
+ private config;
4
+ private currentVersion;
5
+ private pkgName;
6
+ private storageDir;
7
+ private storagePath;
8
+ constructor(currentVersion: string, config?: VersionCheckConfig);
9
+ check(): Promise<boolean>;
10
+ private shouldCheck;
11
+ private updateLastCheck;
12
+ private hasInternetConnection;
13
+ private getLatestVersion;
14
+ private compareVersions;
15
+ private promptAndUpdate;
16
+ private performUpdate;
17
+ private isGlobalInstallation;
18
+ private detectPackageManager;
19
+ private reExecuteCommand;
20
+ }
21
+ //# sourceMappingURL=VersionChecker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionChecker.d.ts","sourceRoot":"","sources":["../../src/cli/VersionChecker.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAMzD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB;IAOzD,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB/B,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,eAAe;YAYT,eAAe;YAoBf,aAAa;IAkC3B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,gBAAgB;CAIzB"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VersionChecker = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const fs_1 = require("fs");
9
+ const https_1 = __importDefault(require("https"));
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const os_1 = require("os");
12
+ const path_1 = require("path");
13
+ class VersionChecker {
14
+ config;
15
+ currentVersion;
16
+ pkgName = '@codemastersolutions/db-utility';
17
+ storageDir;
18
+ storagePath;
19
+ constructor(currentVersion, config) {
20
+ this.currentVersion = currentVersion;
21
+ this.config = config || { enabled: true, frequency: 'daily' };
22
+ this.storageDir = (0, path_1.join)((0, os_1.homedir)(), '.db-utility');
23
+ this.storagePath = (0, path_1.join)(this.storageDir, 'version-check.json');
24
+ }
25
+ async check() {
26
+ if (!this.config.enabled)
27
+ return true;
28
+ if (!this.shouldCheck())
29
+ return true;
30
+ const hasInternet = await this.hasInternetConnection();
31
+ if (!hasInternet)
32
+ return true;
33
+ try {
34
+ const latestVersion = await this.getLatestVersion();
35
+ this.updateLastCheck();
36
+ if (this.compareVersions(latestVersion, this.currentVersion) > 0) {
37
+ const updated = await this.promptAndUpdate(latestVersion);
38
+ return !updated;
39
+ }
40
+ }
41
+ catch (error) {
42
+ }
43
+ return true;
44
+ }
45
+ shouldCheck() {
46
+ if (!(0, fs_1.existsSync)(this.storagePath))
47
+ return true;
48
+ try {
49
+ const content = (0, fs_1.readFileSync)(this.storagePath, 'utf-8');
50
+ const info = JSON.parse(content);
51
+ const lastChecked = new Date(info.lastChecked);
52
+ const now = new Date();
53
+ const diffTime = Math.abs(now.getTime() - lastChecked.getTime());
54
+ const oneDay = 1000 * 60 * 60 * 24;
55
+ switch (this.config.frequency) {
56
+ case 'daily':
57
+ return diffTime >= oneDay;
58
+ case 'weekly':
59
+ return diffTime >= oneDay * 7;
60
+ case 'monthly':
61
+ return diffTime >= oneDay * 30;
62
+ default:
63
+ return diffTime >= oneDay;
64
+ }
65
+ }
66
+ catch {
67
+ return true;
68
+ }
69
+ }
70
+ updateLastCheck() {
71
+ try {
72
+ if (!(0, fs_1.existsSync)(this.storageDir)) {
73
+ (0, fs_1.mkdirSync)(this.storageDir, { recursive: true });
74
+ }
75
+ const info = { lastChecked: Date.now() };
76
+ (0, fs_1.writeFileSync)(this.storagePath, JSON.stringify(info));
77
+ }
78
+ catch {
79
+ }
80
+ }
81
+ hasInternetConnection() {
82
+ return new Promise((resolve) => {
83
+ const req = https_1.default.get('https://registry.npmjs.org', { timeout: 10000 }, (res) => {
84
+ resolve(res.statusCode === 200);
85
+ });
86
+ req.on('error', () => resolve(false));
87
+ req.on('timeout', () => {
88
+ req.destroy();
89
+ resolve(false);
90
+ });
91
+ });
92
+ }
93
+ getLatestVersion() {
94
+ return new Promise((resolve, reject) => {
95
+ https_1.default
96
+ .get(`https://registry.npmjs.org/${this.pkgName}/latest`, { timeout: 10000 }, (res) => {
97
+ let data = '';
98
+ res.on('data', (chunk) => (data += chunk));
99
+ res.on('end', () => {
100
+ try {
101
+ const json = JSON.parse(data);
102
+ resolve(json.version);
103
+ }
104
+ catch (e) {
105
+ reject(e);
106
+ }
107
+ });
108
+ })
109
+ .on('error', reject);
110
+ });
111
+ }
112
+ compareVersions(v1, v2) {
113
+ const p1 = v1.split('.').map(Number);
114
+ const p2 = v2.split('.').map(Number);
115
+ for (let i = 0; i < Math.max(p1.length, p2.length); i++) {
116
+ const n1 = p1[i] || 0;
117
+ const n2 = p2[i] || 0;
118
+ if (n1 > n2)
119
+ return 1;
120
+ if (n1 < n2)
121
+ return -1;
122
+ }
123
+ return 0;
124
+ }
125
+ async promptAndUpdate(latestVersion) {
126
+ console.log(`\nNew version available: ${latestVersion} (current: ${this.currentVersion})`);
127
+ const { shouldUpdate } = await inquirer_1.default.prompt([
128
+ {
129
+ type: 'confirm',
130
+ name: 'shouldUpdate',
131
+ message: 'Do you want to update to the latest version?',
132
+ default: true,
133
+ },
134
+ ]);
135
+ if (shouldUpdate) {
136
+ await this.performUpdate();
137
+ return true;
138
+ }
139
+ return false;
140
+ }
141
+ async performUpdate() {
142
+ const isGlobal = this.isGlobalInstallation();
143
+ const pkgManager = this.detectPackageManager();
144
+ console.log(`Updating ${this.pkgName}...`);
145
+ try {
146
+ let command = '';
147
+ if (isGlobal) {
148
+ command = `npm install -g ${this.pkgName}`;
149
+ }
150
+ else {
151
+ switch (pkgManager) {
152
+ case 'yarn':
153
+ command = `yarn add ${this.pkgName}`;
154
+ break;
155
+ case 'pnpm':
156
+ command = `pnpm add ${this.pkgName}`;
157
+ break;
158
+ default:
159
+ command = `npm install ${this.pkgName}`;
160
+ break;
161
+ }
162
+ }
163
+ (0, child_process_1.execSync)(command, { stdio: 'inherit' });
164
+ console.log('Update completed successfully!');
165
+ this.reExecuteCommand();
166
+ }
167
+ catch (error) {
168
+ console.error('Update failed:', error);
169
+ }
170
+ }
171
+ isGlobalInstallation() {
172
+ try {
173
+ const globalRoot = (0, child_process_1.execSync)('npm root -g', { encoding: 'utf-8' }).trim();
174
+ return __dirname.startsWith(globalRoot);
175
+ }
176
+ catch {
177
+ return false;
178
+ }
179
+ }
180
+ detectPackageManager() {
181
+ if ((0, fs_1.existsSync)('yarn.lock'))
182
+ return 'yarn';
183
+ if ((0, fs_1.existsSync)('pnpm-lock.yaml'))
184
+ return 'pnpm';
185
+ return 'npm';
186
+ }
187
+ reExecuteCommand() {
188
+ const child = (0, child_process_1.spawn)(process.argv[0], process.argv.slice(1), { stdio: 'inherit' });
189
+ child.on('close', (code) => process.exit(code ?? 0));
190
+ }
191
+ }
192
+ exports.VersionChecker = VersionChecker;
193
+ //# sourceMappingURL=VersionChecker.js.map