emilsoftware-utilities 2.0.0-dev.23 → 2.0.0-dev.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/README.MD +182 -38
- package/dist/ContractGenerator.d.ts +4 -3
- package/dist/ContractGenerator.js +15 -5
- package/dist/ContractGenerator.js.map +1 -1
- package/dist/DailyFileTransport.d.ts +8 -2
- package/dist/DailyFileTransport.js +9 -2
- package/dist/DailyFileTransport.js.map +1 -1
- package/dist/DatabaseUpdater.js +32 -27
- package/dist/DatabaseUpdater.js.map +1 -1
- package/dist/EmilsoftwareModule.js.map +1 -1
- package/dist/ExecutionTimeLogger.d.ts +2 -2
- package/dist/ExecutionTimeLogger.js +3 -2
- package/dist/ExecutionTimeLogger.js.map +1 -1
- package/dist/Logger.d.ts +22 -9
- package/dist/Logger.js +131 -54
- package/dist/Logger.js.map +1 -1
- package/dist/Orm.d.ts +26 -6
- package/dist/Orm.js +144 -40
- package/dist/Orm.js.map +1 -1
- package/dist/RoutesLoggerMiddleware.js.map +1 -1
- package/dist/Utilities.d.ts +12 -7
- package/dist/Utilities.js +57 -22
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.d.ts +9 -0
- package/dist/accessi-module/AccessiModule.js +12 -4
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Console/console.css +529 -281
- package/dist/accessi-module/Console/console.js +2081 -85
- package/dist/accessi-module/Console/console.js.map +1 -1
- package/dist/accessi-module/Console/generated/accessiApi.d.ts +167 -1
- package/dist/accessi-module/Console/generated/accessiApi.js +156 -2
- package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +20 -8
- package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js +9 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js +9 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js +9 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js +9 -0
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
- package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +27 -0
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
- package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
- package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
- package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +8 -0
- package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/index.d.ts +18 -0
- package/dist/accessi-module/Console/generated/model/index.js +18 -0
- package/dist/accessi-module/Console/generated/model/index.js.map +1 -1
- package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
- package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
- package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
- package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
- package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.d.ts +13 -0
- package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js +9 -0
- package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/registerRequestCellulare.d.ts +13 -0
- package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js +9 -0
- package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
- package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
- package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
- package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +22 -0
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
- package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
- package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
- package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/userDtoAvatar.d.ts +13 -0
- package/dist/accessi-module/Console/generated/model/userDtoAvatar.js +9 -0
- package/dist/accessi-module/Console/generated/model/userDtoAvatar.js.map +1 -0
- package/dist/accessi-module/Console/generated/model/userDtoCellulare.d.ts +13 -0
- package/dist/accessi-module/Console/generated/model/userDtoCellulare.js +9 -0
- package/dist/accessi-module/Console/generated/model/userDtoCellulare.js.map +1 -0
- package/dist/accessi-module/Console/help.d.ts +13 -0
- package/dist/accessi-module/Console/help.js +348 -0
- package/dist/accessi-module/Console/help.js.map +1 -0
- package/dist/accessi-module/Console/index.html +89 -21
- package/dist/accessi-module/Console/openApiClient.d.ts +34 -0
- package/dist/accessi-module/Console/openApiClient.js +111 -0
- package/dist/accessi-module/Console/openApiClient.js.map +1 -0
- package/dist/accessi-module/Console/wiki.d.ts +52 -0
- package/dist/accessi-module/Console/wiki.js +689 -0
- package/dist/accessi-module/Console/wiki.js.map +1 -0
- package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +8 -1
- package/dist/accessi-module/Controllers/AccessiConsoleController.js +52 -15
- package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -1
- package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -3
- package/dist/accessi-module/Controllers/ConfiguratorController.js +6 -8
- package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
- package/dist/accessi-module/Controllers/EmailController.d.ts +1 -1
- package/dist/accessi-module/Controllers/EmailController.js +1 -1
- package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
- package/dist/accessi-module/Controllers/FiltriController.d.ts +5 -4
- package/dist/accessi-module/Controllers/FiltriController.js +92 -4
- package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
- package/dist/accessi-module/Controllers/PermissionController.d.ts +11 -0
- package/dist/accessi-module/Controllers/PermissionController.js +273 -8
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
- package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
- package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
- package/dist/accessi-module/Controllers/UserController.d.ts +2 -2
- package/dist/accessi-module/Controllers/UserController.js +25 -9
- package/dist/accessi-module/Controllers/UserController.js.map +1 -1
- package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -1
- package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/CatalogDtos.d.ts +66 -0
- package/dist/accessi-module/Dtos/CatalogDtos.js +336 -0
- package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
- package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
- package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
- package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.d.ts +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.js +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/MenuItem.js +1 -0
- package/dist/accessi-module/Dtos/Permission.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js +2 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/Role.js.map +1 -1
- package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
- package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
- package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
- package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
- package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
- package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -1
- package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/UserDto.js +4 -2
- package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
- package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
- package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/index.d.ts +2 -0
- package/dist/accessi-module/Dtos/index.js +2 -0
- package/dist/accessi-module/Dtos/index.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.d.ts +2 -2
- package/dist/accessi-module/Services/AuthService/AuthService.js +36 -36
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
- package/dist/accessi-module/Services/EmailService/EmailService.d.ts +2 -1
- package/dist/accessi-module/Services/EmailService/EmailService.js +20 -17
- package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +10 -3
- package/dist/accessi-module/Services/FiltriService/FiltriService.js +64 -6
- package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +44 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +508 -200
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
- package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +23 -27
- package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.d.ts +10 -3
- package/dist/accessi-module/Services/UserService/UserService.js +241 -155
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/Views/reset-password.html +213 -213
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +8 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +89 -55
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/database-updates/accessiSchema.d.ts +1 -1
- package/dist/accessi-module/database-updates/accessiSchema.js +9 -1
- package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -1
- package/dist/accessi-module/database-updates/optionalColumns.d.ts +2 -0
- package/dist/accessi-module/database-updates/optionalColumns.js +33 -1
- package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +7 -2
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
- package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +1 -0
- package/dist/accessi-module/federated-auth/FederatedAuthController.js +26 -0
- package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -1
- package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +6 -0
- package/dist/accessi-module/federated-auth/FederatedAuthService.js +28 -1
- package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -1
- package/dist/accessi-module/index.d.ts +4 -1
- package/dist/accessi-module/index.js +8 -2
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/jwt/jwt.strategy.js +8 -5
- package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.d.ts +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
- package/dist/accessi-module/middleware/authenticateGen.js +11 -7
- package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
- package/dist/accessi-module/security/accessControl.js +8 -3
- package/dist/accessi-module/security/accessControl.js.map +1 -1
- package/dist/accessi-module/security/authenticatedToken.d.ts +1 -1
- package/dist/accessi-module/security/authenticatedToken.js +2 -1
- package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
- package/dist/accessi-module/security/passwordResetToken.d.ts +9 -3
- package/dist/accessi-module/security/passwordResetToken.js +9 -5
- package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
- package/dist/accessi-module/security/publicAuthRateLimit.d.ts +1 -1
- package/dist/accessi-module/security/publicAuthRateLimit.js +28 -8
- package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
- package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
- package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
- package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
- package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
- package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
- package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
- package/dist/allegati-module/AllegatiModule.d.ts +11 -0
- package/dist/allegati-module/AllegatiModule.js +11 -1
- package/dist/allegati-module/AllegatiModule.js.map +1 -1
- package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
- package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
- package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
- package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
- package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
- package/dist/allegati-module/Dtos/index.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +150 -101
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
- package/dist/allegati-module/index.js.map +1 -1
- package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
- package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
- package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
- package/dist/autobind.d.ts +10 -3
- package/dist/autobind.js +24 -9
- package/dist/autobind.js.map +1 -1
- package/dist/firebird-compat.d.ts +13 -0
- package/dist/firebird-compat.js +3 -2
- package/dist/firebird-compat.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/initEmilsoftwareModule.js.map +1 -1
- package/dist/scripts/generateAccessiWiki.d.ts +1 -0
- package/dist/scripts/generateAccessiWiki.js +131 -0
- package/dist/scripts/generateAccessiWiki.js.map +1 -0
- package/dist/swagger/SwaggerConfig.js +6 -3
- package/dist/swagger/SwaggerConfig.js.map +1 -1
- package/package.json +103 -92
- package/dist/emilsoftware-utilities-2.0.0-dev.23.tgz +0 -0
package/dist/DatabaseUpdater.js
CHANGED
|
@@ -24,10 +24,10 @@ class DatabaseUpdater {
|
|
|
24
24
|
static tableExists(options, table) {
|
|
25
25
|
return __awaiter(this, void 0, void 0, function* () {
|
|
26
26
|
try {
|
|
27
|
-
const query = `
|
|
28
|
-
SELECT 1
|
|
29
|
-
FROM RDB$RELATIONS
|
|
30
|
-
WHERE RDB$RELATION_NAME = ?
|
|
27
|
+
const query = `
|
|
28
|
+
SELECT 1
|
|
29
|
+
FROM RDB$RELATIONS
|
|
30
|
+
WHERE RDB$RELATION_NAME = ?
|
|
31
31
|
AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;
|
|
32
32
|
const result = yield Orm_1.Orm.query(options, query, [table.toUpperCase()]);
|
|
33
33
|
return result.length > 0;
|
|
@@ -48,10 +48,10 @@ class DatabaseUpdater {
|
|
|
48
48
|
static columnExists(options, table, column) {
|
|
49
49
|
return __awaiter(this, void 0, void 0, function* () {
|
|
50
50
|
try {
|
|
51
|
-
const query = `
|
|
52
|
-
SELECT 1
|
|
53
|
-
FROM RDB$RELATION_FIELDS
|
|
54
|
-
WHERE RDB$RELATION_NAME = ?
|
|
51
|
+
const query = `
|
|
52
|
+
SELECT 1
|
|
53
|
+
FROM RDB$RELATION_FIELDS
|
|
54
|
+
WHERE RDB$RELATION_NAME = ?
|
|
55
55
|
AND RDB$FIELD_NAME = ?`;
|
|
56
56
|
const result = yield Orm_1.Orm.query(options, query, [
|
|
57
57
|
table.toUpperCase(),
|
|
@@ -74,9 +74,9 @@ class DatabaseUpdater {
|
|
|
74
74
|
static generatorExists(options, generator) {
|
|
75
75
|
return __awaiter(this, void 0, void 0, function* () {
|
|
76
76
|
try {
|
|
77
|
-
const query = `
|
|
78
|
-
SELECT 1
|
|
79
|
-
FROM RDB$GENERATORS
|
|
77
|
+
const query = `
|
|
78
|
+
SELECT 1
|
|
79
|
+
FROM RDB$GENERATORS
|
|
80
80
|
WHERE RDB$GENERATOR_NAME = ?`;
|
|
81
81
|
const result = yield Orm_1.Orm.query(options, query, [generator.toUpperCase()]);
|
|
82
82
|
return result.length > 0;
|
|
@@ -96,10 +96,10 @@ class DatabaseUpdater {
|
|
|
96
96
|
static triggerExists(options, trigger) {
|
|
97
97
|
return __awaiter(this, void 0, void 0, function* () {
|
|
98
98
|
try {
|
|
99
|
-
const query = `
|
|
100
|
-
SELECT 1
|
|
101
|
-
FROM RDB$TRIGGERS
|
|
102
|
-
WHERE RDB$TRIGGER_NAME = ?
|
|
99
|
+
const query = `
|
|
100
|
+
SELECT 1
|
|
101
|
+
FROM RDB$TRIGGERS
|
|
102
|
+
WHERE RDB$TRIGGER_NAME = ?
|
|
103
103
|
AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;
|
|
104
104
|
const result = yield Orm_1.Orm.query(options, query, [trigger.toUpperCase()]);
|
|
105
105
|
return result.length > 0;
|
|
@@ -117,19 +117,24 @@ class DatabaseUpdater {
|
|
|
117
117
|
*/
|
|
118
118
|
static getDatabaseVersion(options) {
|
|
119
119
|
return __awaiter(this, void 0, void 0, function* () {
|
|
120
|
+
var _a;
|
|
120
121
|
try {
|
|
121
122
|
if (!(yield this.tableExists(options, "PARAMETRI"))) {
|
|
122
123
|
return null;
|
|
123
124
|
}
|
|
124
|
-
const parameters = (yield Orm_1.Orm.query(options, `SELECT CODPAR, DESPAR
|
|
125
|
-
FROM PARAMETRI
|
|
126
|
-
WHERE CODPAR IN (?, ?)
|
|
125
|
+
const parameters = (yield Orm_1.Orm.query(options, `SELECT CODPAR, DESPAR
|
|
126
|
+
FROM PARAMETRI
|
|
127
|
+
WHERE CODPAR IN (?, ?)
|
|
127
128
|
ORDER BY CASE WHEN CODPAR = ? THEN 0 ELSE 1 END`, [
|
|
128
129
|
this.versionParameterKeys[0],
|
|
129
130
|
this.versionParameterKeys[1],
|
|
130
131
|
this.versionParameterKeys[0],
|
|
131
132
|
]));
|
|
132
|
-
|
|
133
|
+
if (parameters.length === 0) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
const rawVersion = (_a = parameters[0]) === null || _a === void 0 ? void 0 : _a.DESPAR;
|
|
137
|
+
return typeof rawVersion === "string" ? rawVersion : rawVersion == null ? null : String(rawVersion);
|
|
133
138
|
}
|
|
134
139
|
catch (error) {
|
|
135
140
|
this.logger.error(`Error getting database version:`, error);
|
|
@@ -144,7 +149,7 @@ class DatabaseUpdater {
|
|
|
144
149
|
*/
|
|
145
150
|
static setDatabaseVersion(options, version) {
|
|
146
151
|
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
-
var _a
|
|
152
|
+
var _a;
|
|
148
153
|
try {
|
|
149
154
|
if (!(yield this.tableExists(options, "PARAMETRI"))) {
|
|
150
155
|
yield this.createParametersTable(options);
|
|
@@ -157,7 +162,7 @@ class DatabaseUpdater {
|
|
|
157
162
|
for (const row of existingRows) {
|
|
158
163
|
yield Orm_1.Orm.execute(options, "UPDATE PARAMETRI SET DESPAR = ? WHERE CODPAR = ?", [
|
|
159
164
|
version,
|
|
160
|
-
(
|
|
165
|
+
String((_a = row.CODPAR) !== null && _a !== void 0 ? _a : "").trim(),
|
|
161
166
|
]);
|
|
162
167
|
}
|
|
163
168
|
}
|
|
@@ -178,12 +183,12 @@ class DatabaseUpdater {
|
|
|
178
183
|
try {
|
|
179
184
|
const tableAlreadyExists = yield this.tableExists(options, "PARAMETRI");
|
|
180
185
|
if (!tableAlreadyExists) {
|
|
181
|
-
const createTableQuery = `
|
|
182
|
-
CREATE TABLE PARAMETRI (
|
|
183
|
-
CODPAR VARCHAR(15) NOT NULL,
|
|
184
|
-
DESPAR VARCHAR(255),
|
|
185
|
-
NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,
|
|
186
|
-
GRUPPO VARCHAR(20)
|
|
186
|
+
const createTableQuery = `
|
|
187
|
+
CREATE TABLE PARAMETRI (
|
|
188
|
+
CODPAR VARCHAR(15) NOT NULL,
|
|
189
|
+
DESPAR VARCHAR(255),
|
|
190
|
+
NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,
|
|
191
|
+
GRUPPO VARCHAR(20)
|
|
187
192
|
);`;
|
|
188
193
|
yield Orm_1.Orm.query(options, createTableQuery);
|
|
189
194
|
yield Orm_1.Orm.query(options, "ALTER TABLE PARAMETRI ADD CONSTRAINT PK_PARAMETRI PRIMARY KEY (CODPAR);");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseUpdater.js","sourceRoot":"","sources":["../src/DatabaseUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Orm } from \"./Orm\";\nimport { Logger } from \"./Logger\";\nimport { Options } from \"node-firebird\";\n\nexport abstract class DatabaseUpdater {\n //#region Fields and Options\n protected static options: Options;\n protected static logger: Logger = new Logger(DatabaseUpdater.name);\n protected static readonly versionParameterKeys = [\"VersioneDB\", \"DBVERSION\"];\n //#endregion\n\n //#region Utility Methods\n /**\n * Checks if a table exists.\n * @param options Database connection options.\n * @param table Table name.\n * @returns True if the table exists, false otherwise.\n */\n protected static async tableExists(\n options: Options,\n table: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1\n FROM RDB$RELATIONS\n WHERE RDB$RELATION_NAME = ?\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\n const result = await Orm.query(options, query, [table.toUpperCase()]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking table ${table}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if a column exists in a specific table.\n * @param options Database connection options.\n * @param table Table name.\n * @param column Column name.\n * @returns True if the column exists, false otherwise.\n */\n protected static async columnExists(\n options: Options,\n table: string,\n column: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1 \n FROM RDB$RELATION_FIELDS \n WHERE RDB$RELATION_NAME = ? \n AND RDB$FIELD_NAME = ?`;\n const result = await Orm.query(options, query, [\n table.toUpperCase(),\n column.toUpperCase(),\n ]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking column ${column} on table ${table}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if a generator/sequence exists.\n * @param options Database connection options.\n * @param generator Generator name.\n * @returns True if the generator exists, false otherwise.\n */\n protected static async generatorExists(\n options: Options,\n generator: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1\n FROM RDB$GENERATORS\n WHERE RDB$GENERATOR_NAME = ?`;\n const result = await Orm.query(options, query, [generator.toUpperCase()]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking generator ${generator}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if a trigger exists.\n * @param options Database connection options.\n * @param trigger Trigger name.\n * @returns True if the trigger exists, false otherwise.\n */\n protected static async triggerExists(\n options: Options,\n trigger: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1\n FROM RDB$TRIGGERS\n WHERE RDB$TRIGGER_NAME = ?\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\n const result = await Orm.query(options, query, [trigger.toUpperCase()]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking trigger ${trigger}:`, error);\n throw error;\n }\n }\n\n /**\n * Retrieves the current database version from the PARAMETRI table.\n * @param options Database connection options.\n * @returns The current database version or null if not found.\n */\n protected static async getDatabaseVersion(options: Options): Promise<string | null> {\n\n try {\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\n return null;\n }\n\n const parameters = (await Orm.query(\n options,\n `SELECT CODPAR, DESPAR\n FROM PARAMETRI\n WHERE CODPAR IN (?, ?)\n ORDER BY CASE WHEN CODPAR = ? THEN 0 ELSE 1 END`,\n [\n this.versionParameterKeys[0],\n this.versionParameterKeys[1],\n this.versionParameterKeys[0],\n ]\n )) as any[];\n\n return parameters.length > 0 ? parameters[0].DESPAR : null;\n } catch (error: any) {\n this.logger.error(`Error getting database version:`, error);\n throw error;\n }\n }\n\n /**\n * Updates the database version in the PARAMETRI table.\n * @param options Database connection options.\n * @param version The new database version.\n */\n protected static async setDatabaseVersion(\n options: Options,\n version: string\n ): Promise<void> {\n\n try {\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\n await this.createParametersTable(options);\n }\n\n const existingRows = (await Orm.query(\n options,\n \"SELECT CODPAR FROM PARAMETRI WHERE CODPAR IN (?, ?)\",\n [this.versionParameterKeys[0], this.versionParameterKeys[1]]\n )) as any[];\n\n if (existingRows.length === 0) {\n await Orm.execute(\n options,\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?, ?, ?, ?)\",\n [this.versionParameterKeys[0], version, \"versione\", null]\n );\n return;\n }\n\n for (const row of existingRows) {\n await Orm.execute(options, \"UPDATE PARAMETRI SET DESPAR = ? WHERE CODPAR = ?\", [\n version,\n row.CODPAR?.trim?.() ?? row.CODPAR,\n ]);\n }\n } catch (error: any) {\n this.logger.error(`Error setting database version:`, error);\n throw error;\n }\n }\n //#endregion\n\n //#region Initialization Methods\n /**\n * Ensures the PARAMETRI table exists and initializes it if necessary.\n * @param options Database connection options.\n */\n protected static async createParametersTable(options: Options): Promise<void> {\n try {\n const tableAlreadyExists = await this.tableExists(options, \"PARAMETRI\");\n if (!tableAlreadyExists) {\n const createTableQuery = `\n CREATE TABLE PARAMETRI (\n CODPAR VARCHAR(15) NOT NULL,\n DESPAR VARCHAR(255),\n NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,\n GRUPPO VARCHAR(20)\n );`;\n\n await Orm.query(options, createTableQuery);\n\n await Orm.query(\n options,\n \"ALTER TABLE PARAMETRI ADD CONSTRAINT PK_PARAMETRI PRIMARY KEY (CODPAR);\"\n );\n }\n\n const versioneDb = await this.getDatabaseVersion(options);\n if (versioneDb !== null && versioneDb !== undefined) {\n return;\n }\n\n await Orm.execute(\n options,\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?,?,?,?)\",\n [this.versionParameterKeys[0], \"0.0a\", \"versione\", null]\n );\n } catch (error: any) {\n this.logger.error(\"Error creating table PARAMETRI:\", error);\n throw error;\n }\n\n\n }\n //#endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DatabaseUpdater.js","sourceRoot":"","sources":["../src/DatabaseUpdater.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAA4B;AAC5B,qCAAkC;AAGlC,MAAsB,eAAe;IAKnC,YAAY;IAEZ,yBAAyB;IACzB;;;;;OAKG;IACO,MAAM,CAAO,WAAW,CAChC,OAAgB,EAChB,KAAa;;YAGb,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG;;;;6CAIyB,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACtE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;;;OAMG;IACO,MAAM,CAAO,YAAY,CACjC,OAAgB,EAChB,KAAa,EACb,MAAc;;YAGd,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG;;;;+BAIW,CAAC;gBAC1B,MAAM,MAAM,GAAG,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE;oBAC7C,KAAK,CAAC,WAAW,EAAE;oBACnB,MAAM,CAAC,WAAW,EAAE;iBACrB,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,aAAa,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/E,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;;OAKG;IACO,MAAM,CAAO,eAAe,CACpC,OAAgB,EAChB,SAAiB;;YAGjB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG;;;mCAGe,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC1E,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;gBACnE,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;;OAKG;IACO,MAAM,CAAO,aAAa,CAClC,OAAgB,EAChB,OAAe;;YAGf,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG;;;;6CAIyB,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACxE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;OAIG;IACO,MAAM,CAAO,kBAAkB,CAAC,OAAgB;;;YAExD,IAAI,CAAC;gBACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;oBACpD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,UAAU,GAAG,CAAC,MAAM,SAAG,CAAC,KAAK,CACjC,OAAO,EACP;;;yDAGiD,EACjD;oBACE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;iBAC7B,CACF,CAAC,CAAC;gBAEH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,UAAU,GAAG,MAAA,UAAU,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC;gBACzC,OAAO,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBAC5D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;OAIG;IACO,MAAM,CAAO,kBAAkB,CACvC,OAAgB,EAChB,OAAe;;;YAGf,IAAI,CAAC;gBACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;oBACpD,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,YAAY,GAAG,CAAC,MAAM,SAAG,CAAC,KAAK,CACnC,OAAO,EACP,qDAAqD,EACrD,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAC,CAAC;gBAEH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,EACP,0EAA0E,EAC1E,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAC1D,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC/B,MAAM,SAAG,CAAC,OAAO,CAAC,OAAO,EAAE,kDAAkD,EAAE;wBAC7E,OAAO;wBACP,MAAM,CAAC,MAAA,GAAG,CAAC,MAAM,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE;qBAChC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBAC5D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IACD,YAAY;IAEZ,gCAAgC;IAChC;;;OAGG;IACO,MAAM,CAAO,qBAAqB,CAAC,OAAgB;;YAC3D,IAAI,CAAC;gBACH,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACxE,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,MAAM,gBAAgB,GAAG;;;;;;aAMpB,CAAC;oBAEN,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;oBAE3C,MAAM,SAAG,CAAC,KAAK,CACb,OAAO,EACP,yEAAyE,CAC1E,CAAC;gBACJ,CAAC;gBAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBACpD,OAAO;gBACT,CAAC;gBAED,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,EACP,uEAAuE,EACvE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CACzD,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBAC5D,MAAM,KAAK,CAAC;YACd,CAAC;QAGH,CAAC;KAAA;;AAzOH,0CA2OC;AAxOkB,sBAAM,GAAW,IAAI,eAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACzC,oCAAoB,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC","sourcesContent":["import { Orm } from \"./Orm\";\r\nimport { Logger } from \"./Logger\";\r\nimport { Options } from \"node-firebird\";\r\n\r\nexport abstract class DatabaseUpdater {\r\n //#region Fields and Options\r\n protected static options: Options;\r\n protected static logger: Logger = new Logger(DatabaseUpdater.name);\r\n protected static readonly versionParameterKeys = [\"VersioneDB\", \"DBVERSION\"];\r\n //#endregion\r\n\r\n //#region Utility Methods\r\n /**\r\n * Checks if a table exists.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @returns True if the table exists, false otherwise.\r\n */\r\n protected static async tableExists(\r\n options: Options,\r\n table: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$RELATIONS\r\n WHERE RDB$RELATION_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [table.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error) {\r\n this.logger.error(`Error checking table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a column exists in a specific table.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @param column Column name.\r\n * @returns True if the column exists, false otherwise.\r\n */\r\n protected static async columnExists(\r\n options: Options,\r\n table: string,\r\n column: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1 \r\n FROM RDB$RELATION_FIELDS \r\n WHERE RDB$RELATION_NAME = ? \r\n AND RDB$FIELD_NAME = ?`;\r\n const result = await Orm.query(options, query, [\r\n table.toUpperCase(),\r\n column.toUpperCase(),\r\n ]);\r\n return result.length > 0;\r\n } catch (error) {\r\n this.logger.error(`Error checking column ${column} on table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a generator/sequence exists.\r\n * @param options Database connection options.\r\n * @param generator Generator name.\r\n * @returns True if the generator exists, false otherwise.\r\n */\r\n protected static async generatorExists(\r\n options: Options,\r\n generator: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$GENERATORS\r\n WHERE RDB$GENERATOR_NAME = ?`;\r\n const result = await Orm.query(options, query, [generator.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error) {\r\n this.logger.error(`Error checking generator ${generator}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a trigger exists.\r\n * @param options Database connection options.\r\n * @param trigger Trigger name.\r\n * @returns True if the trigger exists, false otherwise.\r\n */\r\n protected static async triggerExists(\r\n options: Options,\r\n trigger: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$TRIGGERS\r\n WHERE RDB$TRIGGER_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [trigger.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error) {\r\n this.logger.error(`Error checking trigger ${trigger}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the current database version from the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @returns The current database version or null if not found.\r\n */\r\n protected static async getDatabaseVersion(options: Options): Promise<string | null> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n return null;\r\n }\r\n\r\n const parameters = (await Orm.query(\r\n options,\r\n `SELECT CODPAR, DESPAR\r\n FROM PARAMETRI\r\n WHERE CODPAR IN (?, ?)\r\n ORDER BY CASE WHEN CODPAR = ? THEN 0 ELSE 1 END`,\r\n [\r\n this.versionParameterKeys[0],\r\n this.versionParameterKeys[1],\r\n this.versionParameterKeys[0],\r\n ]\r\n ));\r\n\r\n if (parameters.length === 0) {\r\n return null;\r\n }\r\n\r\n const rawVersion = parameters[0]?.DESPAR;\r\n return typeof rawVersion === \"string\" ? rawVersion : rawVersion == null ? null : String(rawVersion);\r\n } catch (error) {\r\n this.logger.error(`Error getting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the database version in the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @param version The new database version.\r\n */\r\n protected static async setDatabaseVersion(\r\n options: Options,\r\n version: string\r\n ): Promise<void> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n await this.createParametersTable(options);\r\n }\r\n\r\n const existingRows = (await Orm.query(\r\n options,\r\n \"SELECT CODPAR FROM PARAMETRI WHERE CODPAR IN (?, ?)\",\r\n [this.versionParameterKeys[0], this.versionParameterKeys[1]]\r\n ));\r\n\r\n if (existingRows.length === 0) {\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?, ?, ?, ?)\",\r\n [this.versionParameterKeys[0], version, \"versione\", null]\r\n );\r\n return;\r\n }\r\n\r\n for (const row of existingRows) {\r\n await Orm.execute(options, \"UPDATE PARAMETRI SET DESPAR = ? WHERE CODPAR = ?\", [\r\n version,\r\n String(row.CODPAR ?? \"\").trim(),\r\n ]);\r\n }\r\n } catch (error) {\r\n this.logger.error(`Error setting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Initialization Methods\r\n /**\r\n * Ensures the PARAMETRI table exists and initializes it if necessary.\r\n * @param options Database connection options.\r\n */\r\n protected static async createParametersTable(options: Options): Promise<void> {\r\n try {\r\n const tableAlreadyExists = await this.tableExists(options, \"PARAMETRI\");\r\n if (!tableAlreadyExists) {\r\n const createTableQuery = `\r\n CREATE TABLE PARAMETRI (\r\n CODPAR VARCHAR(15) NOT NULL,\r\n DESPAR VARCHAR(255),\r\n NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,\r\n GRUPPO VARCHAR(20)\r\n );`;\r\n\r\n await Orm.query(options, createTableQuery);\r\n\r\n await Orm.query(\r\n options,\r\n \"ALTER TABLE PARAMETRI ADD CONSTRAINT PK_PARAMETRI PRIMARY KEY (CODPAR);\"\r\n );\r\n }\r\n\r\n const versioneDb = await this.getDatabaseVersion(options);\r\n if (versioneDb !== null && versioneDb !== undefined) {\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?,?,?,?)\",\r\n [this.versionParameterKeys[0], \"0.0a\", \"versione\", null]\r\n );\r\n } catch (error) {\r\n this.logger.error(\"Error creating table PARAMETRI:\", error);\r\n throw error;\r\n }\r\n\r\n\r\n }\r\n //#endregion\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmilsoftwareModule.js","sourceRoot":"","sources":["../src/EmilsoftwareModule.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,kEAA+E;AAC/E,qEAAmF;AACnF,qCAAkC;AAUlC;;;GAGG;AAEI,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAC3B,MAAM,CAAC,OAAO,CAAC,OAA4B;QAEvC,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,oBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC5F,CAAC;QAGD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,6BAAa,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,6BAAa,CAAC,CAAC;QAChC,CAAC;aACI,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,0EAA0E,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,+BAAc,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,+BAAc,CAAC,CAAC;QACjC,CAAC;aACI,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,4EAA4E,CAAC,CAAC;QACjG,CAAC;QAED,OAAO;YACH,MAAM,EAAE,oBAAkB;YAC1B,OAAO;YACP,OAAO;SACV,CAAC;IACN,CAAC;CACJ,CAAA;AApCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,kBAAkB,CAoC9B","sourcesContent":["import { DynamicModule, Module } from \"@nestjs/common\";\nimport { AccessiModule, AccessiOptions } from \"./accessi-module/AccessiModule\";\nimport { AllegatiModule, AllegatiOptions } from \"./allegati-module/AllegatiModule\";\nimport { Logger } from \"./Logger\";\n\n/**\n * Configuration options for the unified module that combines Accessi and Allegati functionality\n */\nexport interface EmilsoftwareOptions {\n accessiOptions: AccessiOptions;\n allegatiOptions: AllegatiOptions;\n}\n\n/**\n * Unified module that combines user access management (Accessi) and file attachment management (Allegati)\n * into a single NestJS module with shared Swagger documentation\n */\n@Module({})\nexport class EmilsoftwareModule {\n static forRoot(options: EmilsoftwareOptions): DynamicModule {\n\n const logger: Logger = new Logger(EmilsoftwareModule.name);\n let imports = [];\n let exports = [];\n\n if (!options) {\n throw new Error(\"EmilsoftwareModule requires valid accessiOptions and allegatiOptions\");\n }\n\n\n if (options.accessiOptions) {\n logger.info(\"Initializing AccessiModule with provided options.\");\n imports.push(AccessiModule.forRoot(options.accessiOptions));\n exports.push(AccessiModule);\n }\n else {\n logger.warning(\"Accessi options are not provided. AccessiModule will not be initialized.\");\n }\n\n if (options.allegatiOptions) {\n logger.info(\"Initializing AllegatiModule with provided options.\");\n imports.push(AllegatiModule.forRoot(options.allegatiOptions));\n exports.push(AllegatiModule);\n }\n else {\n logger.warning(\"Allegati options are not provided. AllegatiModule will not be initialized.\");\n }\n\n return {\n module: EmilsoftwareModule,\n imports,\n exports\n };\n }\n} "]}
|
|
1
|
+
{"version":3,"file":"EmilsoftwareModule.js","sourceRoot":"","sources":["../src/EmilsoftwareModule.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,kEAA+E;AAC/E,qEAAmF;AACnF,qCAAkC;AAUlC;;;GAGG;AAEI,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAC3B,MAAM,CAAC,OAAO,CAAC,OAA4B;QAEvC,MAAM,MAAM,GAAW,IAAI,eAAM,CAAC,oBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC5F,CAAC;QAGD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,6BAAa,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,6BAAa,CAAC,CAAC;QAChC,CAAC;aACI,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,0EAA0E,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,+BAAc,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,+BAAc,CAAC,CAAC;QACjC,CAAC;aACI,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,4EAA4E,CAAC,CAAC;QACjG,CAAC;QAED,OAAO;YACH,MAAM,EAAE,oBAAkB;YAC1B,OAAO;YACP,OAAO;SACV,CAAC;IACN,CAAC;CACJ,CAAA;AApCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,kBAAkB,CAoC9B","sourcesContent":["import { DynamicModule, Module } from \"@nestjs/common\";\r\nimport { AccessiModule, AccessiOptions } from \"./accessi-module/AccessiModule\";\r\nimport { AllegatiModule, AllegatiOptions } from \"./allegati-module/AllegatiModule\";\r\nimport { Logger } from \"./Logger\";\r\n\r\n/**\r\n * Configuration options for the unified module that combines Accessi and Allegati functionality\r\n */\r\nexport interface EmilsoftwareOptions {\r\n accessiOptions: AccessiOptions;\r\n allegatiOptions: AllegatiOptions;\r\n}\r\n\r\n/**\r\n * Unified module that combines user access management (Accessi) and file attachment management (Allegati)\r\n * into a single NestJS module with shared Swagger documentation\r\n */\r\n@Module({})\r\nexport class EmilsoftwareModule {\r\n static forRoot(options: EmilsoftwareOptions): DynamicModule {\r\n\r\n const logger: Logger = new Logger(EmilsoftwareModule.name);\r\n let imports = [];\r\n let exports = [];\r\n\r\n if (!options) {\r\n throw new Error(\"EmilsoftwareModule requires valid accessiOptions and allegatiOptions\");\r\n }\r\n\r\n\r\n if (options.accessiOptions) {\r\n logger.info(\"Initializing AccessiModule with provided options.\");\r\n imports.push(AccessiModule.forRoot(options.accessiOptions));\r\n exports.push(AccessiModule);\r\n }\r\n else {\r\n logger.warning(\"Accessi options are not provided. AccessiModule will not be initialized.\");\r\n }\r\n\r\n if (options.allegatiOptions) {\r\n logger.info(\"Initializing AllegatiModule with provided options.\");\r\n imports.push(AllegatiModule.forRoot(options.allegatiOptions));\r\n exports.push(AllegatiModule);\r\n }\r\n else {\r\n logger.warning(\"Allegati options are not provided. AllegatiModule will not be initialized.\");\r\n }\r\n\r\n return {\r\n module: EmilsoftwareModule,\r\n imports,\r\n exports\r\n };\r\n }\r\n} "]}
|
|
@@ -4,7 +4,7 @@ export declare class ExecutionTimeLogger {
|
|
|
4
4
|
* @param target The target object.
|
|
5
5
|
* @param propertyKey The name of the method.
|
|
6
6
|
* @param descriptor The property descriptor of the method.
|
|
7
|
-
* @description use ExecutionTimeLogger.apply on
|
|
7
|
+
* @description use ExecutionTimeLogger.apply on a method
|
|
8
8
|
*/
|
|
9
|
-
static apply(target:
|
|
9
|
+
static apply(target: object, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor;
|
|
10
10
|
}
|
|
@@ -17,7 +17,7 @@ class ExecutionTimeLogger {
|
|
|
17
17
|
* @param target The target object.
|
|
18
18
|
* @param propertyKey The name of the method.
|
|
19
19
|
* @param descriptor The property descriptor of the method.
|
|
20
|
-
* @description use ExecutionTimeLogger.apply on
|
|
20
|
+
* @description use ExecutionTimeLogger.apply on a method
|
|
21
21
|
*/
|
|
22
22
|
static apply(target, propertyKey, descriptor) {
|
|
23
23
|
const originalMethod = descriptor.value;
|
|
@@ -38,7 +38,8 @@ class ExecutionTimeLogger {
|
|
|
38
38
|
return result;
|
|
39
39
|
}
|
|
40
40
|
catch (error) {
|
|
41
|
-
|
|
41
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
42
|
+
logger.error(`[${className}] ${propertyKey} method threw an error: ${message}`);
|
|
42
43
|
throw error;
|
|
43
44
|
}
|
|
44
45
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionTimeLogger.js","sourceRoot":"","sources":["../src/ExecutionTimeLogger.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yBAA4B;AAE5B,MAAa,mBAAmB;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"ExecutionTimeLogger.js","sourceRoot":"","sources":["../src/ExecutionTimeLogger.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yBAA4B;AAE5B,MAAa,mBAAmB;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,MAAc,EAAE,WAAmB,EAAE,UAA8B;QAC5E,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,CAAC,4DAA4D,OAAO,cAAc,EAAE,CAAC,CAAC;QAC7G,CAAC;QAED,MAAM,SAAS,GAAI,MAA4C,CAAC,WAAW,CAAC,IAAI,CAAC;QACjF,MAAM,MAAM,GAAG,IAAI,SAAM,CAAC,SAAS,CAAC,CAAC;QACrC,UAAU,CAAC,KAAK,GAAG,UAAgB,GAAG,IAAe;;gBACjD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,WAAW,iCAAiC,CAAC,CAAC;gBAE5E,IAAI,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACtD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAClC,MAAM,sBAAsB,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;oBAC5D,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,WAAW,gBAAgB,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBAC5G,OAAO,MAAM,CAAC;gBAClB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACvE,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,WAAW,2BAA2B,OAAO,EAAE,CAAC,CAAC;oBAChF,MAAM,KAAK,CAAC;gBAChB,CAAC;YACL,CAAC;SAAA,CAAC;QAEF,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ;AApCD,kDAoCC","sourcesContent":["import { Logger } from \"./\";\r\n\r\nexport class ExecutionTimeLogger {\r\n /**\r\n * Wraps a method to log its execution time and errors.\r\n * @param target The target object.\r\n * @param propertyKey The name of the method.\r\n * @param descriptor The property descriptor of the method.\r\n * @description use ExecutionTimeLogger.apply on a method\r\n */\r\n static apply(target: object, propertyKey: string, descriptor: PropertyDescriptor) {\r\n const originalMethod = descriptor.value;\r\n\r\n if (typeof originalMethod !== \"function\") {\r\n throw new TypeError(`ExecutionTimeLogger can only be applied to methods, not: ${typeof originalMethod}`);\r\n }\r\n\r\n const className = (target as { constructor: { name: string } }).constructor.name;\r\n const logger = new Logger(className);\r\n descriptor.value = async function (...args: unknown[]) {\r\n const start = process.hrtime();\r\n logger.info(`[${className}] ${propertyKey} method execution started . . .`);\r\n \r\n try {\r\n const result = await originalMethod.apply(this, args);\r\n const end = process.hrtime(start);\r\n const durationInMilliseconds = end[0] * 1000 + end[1] / 1e6;\r\n logger.info(`[${className}] ${propertyKey} method took ${durationInMilliseconds.toFixed(2)} ms to execute`);\r\n return result;\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n logger.error(`[${className}] ${propertyKey} method threw an error: ${message}`);\r\n throw error;\r\n }\r\n };\r\n\r\n return descriptor;\r\n }\r\n}\r\n"]}
|
package/dist/Logger.d.ts
CHANGED
|
@@ -7,25 +7,38 @@ export declare enum LogLevels {
|
|
|
7
7
|
LOG = "LOG",
|
|
8
8
|
DATABASE = "DATABASE"
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Logger strutturato dell'applicazione.
|
|
12
|
+
*
|
|
13
|
+
* - I log finiscono su console (colorati) e su file JSON giornaliero.
|
|
14
|
+
* - Le istanze con la stessa `logDirectory` condividono un unico logger winston
|
|
15
|
+
* (un solo transport/timer), evitando di crearne uno per classe.
|
|
16
|
+
* - I campi sensibili (password, token, secret, ...) sono redatti automaticamente.
|
|
17
|
+
*/
|
|
10
18
|
export declare class Logger {
|
|
11
19
|
private readonly winstonLogger;
|
|
12
20
|
private readonly tag;
|
|
13
21
|
private readonly logDirectory;
|
|
14
|
-
private
|
|
22
|
+
private readonly maxLevel;
|
|
23
|
+
/** Logger winston condivisi per directory, così da non moltiplicare transport e timer. */
|
|
24
|
+
private static readonly sharedLoggers;
|
|
25
|
+
private static colorsRegistered;
|
|
15
26
|
constructor(tag: string, config?: {
|
|
16
27
|
logDirectory?: string;
|
|
17
28
|
customFormat?: winston.Logform.Format;
|
|
18
29
|
transports?: winston.transport[];
|
|
30
|
+
/** Livello minimo loggato: `error`..`database` (default `database`, ovvero tutto). Override con `LOG_LEVEL`. */
|
|
31
|
+
level?: string;
|
|
19
32
|
});
|
|
20
|
-
private
|
|
33
|
+
private static resolveSharedLogger;
|
|
21
34
|
execStart(prefix?: string): number;
|
|
22
|
-
execStop(prefix: string, startTime: number, error?: boolean): void;
|
|
23
|
-
info(...data:
|
|
24
|
-
dbLog(...data:
|
|
25
|
-
debug(...data:
|
|
26
|
-
warning(...data:
|
|
27
|
-
log(...data:
|
|
28
|
-
error(...data:
|
|
35
|
+
execStop(prefix: string | undefined, startTime: number, error?: boolean): void;
|
|
36
|
+
info(...data: unknown[]): void;
|
|
37
|
+
dbLog(...data: unknown[]): void;
|
|
38
|
+
debug(...data: unknown[]): void;
|
|
39
|
+
warning(...data: unknown[]): void;
|
|
40
|
+
log(...data: unknown[]): void;
|
|
41
|
+
error(...data: unknown[]): void;
|
|
29
42
|
private print;
|
|
30
43
|
static createLogger(tag: string, config?: {
|
|
31
44
|
logDirectory?: string;
|
package/dist/Logger.js
CHANGED
|
@@ -27,48 +27,120 @@ var LogLevels;
|
|
|
27
27
|
LogLevels["LOG"] = "LOG";
|
|
28
28
|
LogLevels["DATABASE"] = "DATABASE";
|
|
29
29
|
})(LogLevels || (exports.LogLevels = LogLevels = {}));
|
|
30
|
+
/** Livelli winston usati dal logger (comprende `database` e `general`). */
|
|
31
|
+
const WIN_LEVELS = {
|
|
32
|
+
error: 1,
|
|
33
|
+
warning: 2,
|
|
34
|
+
info: 3,
|
|
35
|
+
general: 3,
|
|
36
|
+
http: 4,
|
|
37
|
+
verbose: 5,
|
|
38
|
+
debug: 6,
|
|
39
|
+
silly: 7,
|
|
40
|
+
database: 8,
|
|
41
|
+
};
|
|
42
|
+
/** Chiavi i cui valori non devono mai finire nei log. */
|
|
43
|
+
const SENSITIVE_KEY_PATTERN = /(password|passwd|pwd|secret|token|authorization|apikey|api_key|cookie)/i;
|
|
44
|
+
const REDACTED = '[REDACTED]';
|
|
45
|
+
/**
|
|
46
|
+
* Serializza un valore per il log, redigendo i campi sensibili e risolvendo
|
|
47
|
+
* `Error` e riferimenti circolari (che altrimenti diventano `[object Object]`).
|
|
48
|
+
*/
|
|
49
|
+
function serializeLogValue(value, seen) {
|
|
50
|
+
if (value instanceof Error) {
|
|
51
|
+
return { name: value.name, message: value.message, stack: value.stack };
|
|
52
|
+
}
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
return value.map((item) => serializeLogValue(item, seen));
|
|
55
|
+
}
|
|
56
|
+
if (value && typeof value === 'object') {
|
|
57
|
+
if (seen.has(value)) {
|
|
58
|
+
return '[Circular]';
|
|
59
|
+
}
|
|
60
|
+
seen.add(value);
|
|
61
|
+
const result = {};
|
|
62
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
63
|
+
result[key] = SENSITIVE_KEY_PATTERN.test(key) ? REDACTED : serializeLogValue(nested, seen);
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
/** Costruisce il messaggio testuale del log a partire dagli argomenti. */
|
|
70
|
+
function stringifyLogData(data) {
|
|
71
|
+
return data.map((value) => {
|
|
72
|
+
var _a;
|
|
73
|
+
if (typeof value === 'string') {
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
if (value instanceof Error) {
|
|
77
|
+
return (_a = value.stack) !== null && _a !== void 0 ? _a : `${value.name}: ${value.message}`;
|
|
78
|
+
}
|
|
79
|
+
if (value === undefined) {
|
|
80
|
+
return 'undefined';
|
|
81
|
+
}
|
|
82
|
+
if (value === null) {
|
|
83
|
+
return 'null';
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
return JSON.stringify(serializeLogValue(value, new WeakSet()));
|
|
87
|
+
}
|
|
88
|
+
catch (_b) {
|
|
89
|
+
return String(value);
|
|
90
|
+
}
|
|
91
|
+
}).join(', ');
|
|
92
|
+
}
|
|
93
|
+
/** Formato condiviso: JSON a una riga, con tag/file/level/messaggio. */
|
|
94
|
+
function defaultFormat() {
|
|
95
|
+
return winston_1.default.format.printf((_a) => {
|
|
96
|
+
var { timestamp, tag, file, level, message } = _a, meta = __rest(_a, ["timestamp", "tag", "file", "level", "message"]);
|
|
97
|
+
return JSON.stringify(Object.assign({ timestamp: timestamp || new Date().toISOString(), tag, file: String(file !== null && file !== void 0 ? file : '').split('\\').join('/'), level: level === 'general' ? 'log' : level, message }, meta));
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Logger strutturato dell'applicazione.
|
|
102
|
+
*
|
|
103
|
+
* - I log finiscono su console (colorati) e su file JSON giornaliero.
|
|
104
|
+
* - Le istanze con la stessa `logDirectory` condividono un unico logger winston
|
|
105
|
+
* (un solo transport/timer), evitando di crearne uno per classe.
|
|
106
|
+
* - I campi sensibili (password, token, secret, ...) sono redatti automaticamente.
|
|
107
|
+
*/
|
|
30
108
|
class Logger {
|
|
31
109
|
constructor(tag, config) {
|
|
110
|
+
var _a, _b, _c;
|
|
32
111
|
this.tag = tag || "[UNTAGGED]";
|
|
33
112
|
this.logDirectory = (config === null || config === void 0 ? void 0 : config.logDirectory) || "logs";
|
|
34
|
-
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
113
|
+
const configuredLevel = ((_b = (_a = config === null || config === void 0 ? void 0 : config.level) !== null && _a !== void 0 ? _a : process.env.LOG_LEVEL) !== null && _b !== void 0 ? _b : 'database').toLowerCase();
|
|
114
|
+
this.maxLevel = (_c = WIN_LEVELS[configuredLevel]) !== null && _c !== void 0 ? _c : WIN_LEVELS.database;
|
|
115
|
+
const format = winston_1.default.format.combine(winston_1.default.format.timestamp(), (config === null || config === void 0 ? void 0 : config.customFormat) || defaultFormat());
|
|
116
|
+
this.winstonLogger = (config === null || config === void 0 ? void 0 : config.transports)
|
|
117
|
+
? winston_1.default.createLogger({ level: 'database', format, transports: config.transports, levels: WIN_LEVELS })
|
|
118
|
+
: Logger.resolveSharedLogger(this.logDirectory, format);
|
|
119
|
+
if (!Logger.colorsRegistered) {
|
|
120
|
+
winston_1.default.addColors({
|
|
121
|
+
database: "green",
|
|
122
|
+
error: "red",
|
|
123
|
+
warning: "yellow",
|
|
124
|
+
info: "blue",
|
|
125
|
+
debug: "magenta",
|
|
126
|
+
log: "cyan",
|
|
127
|
+
});
|
|
128
|
+
Logger.colorsRegistered = true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
static resolveSharedLogger(logDirectory, format) {
|
|
132
|
+
const existing = Logger.sharedLoggers.get(logDirectory);
|
|
133
|
+
if (existing) {
|
|
134
|
+
return existing;
|
|
135
|
+
}
|
|
136
|
+
const logger = winston_1.default.createLogger({
|
|
43
137
|
level: 'database',
|
|
44
|
-
format
|
|
45
|
-
transports:
|
|
46
|
-
|
|
47
|
-
],
|
|
48
|
-
levels: {
|
|
49
|
-
error: 1,
|
|
50
|
-
warning: 2,
|
|
51
|
-
info: 3,
|
|
52
|
-
general: 3,
|
|
53
|
-
http: 4,
|
|
54
|
-
verbose: 5,
|
|
55
|
-
debug: 6,
|
|
56
|
-
silly: 7,
|
|
57
|
-
database: 8,
|
|
58
|
-
},
|
|
138
|
+
format,
|
|
139
|
+
transports: [new DailyFileTransport_1.DailyFileTransport(logDirectory)],
|
|
140
|
+
levels: WIN_LEVELS,
|
|
59
141
|
});
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
database: "green",
|
|
63
|
-
error: "red",
|
|
64
|
-
warning: "yellow",
|
|
65
|
-
info: "blue",
|
|
66
|
-
debug: "magenta",
|
|
67
|
-
log: "cyan",
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
replaceAll(string, match, replacer) {
|
|
71
|
-
return string.split(match).join(replacer);
|
|
142
|
+
Logger.sharedLoggers.set(logDirectory, logger);
|
|
143
|
+
return logger;
|
|
72
144
|
}
|
|
73
145
|
execStart(prefix = "") {
|
|
74
146
|
this.print(LogLevels.INFO, `${prefix} - Execution started`);
|
|
@@ -98,44 +170,49 @@ class Logger {
|
|
|
98
170
|
this.print(LogLevels.ERROR, ...data);
|
|
99
171
|
}
|
|
100
172
|
print(level, ...data) {
|
|
173
|
+
var _a;
|
|
174
|
+
const rank = level === LogLevels.LOG ? WIN_LEVELS.general : ((_a = WIN_LEVELS[level.toLowerCase()]) !== null && _a !== void 0 ? _a : WIN_LEVELS.database);
|
|
175
|
+
if (rank > this.maxLevel) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
101
178
|
const now = new Date();
|
|
102
179
|
const fileName = this.tag.split("\\").pop() || this.tag;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
file: fileName,
|
|
106
|
-
time: now,
|
|
107
|
-
};
|
|
108
|
-
const logEntry = {
|
|
109
|
-
level: level === LogLevels.LOG ? 'general' : level.toLowerCase(),
|
|
110
|
-
message: [...data].join(","),
|
|
111
|
-
};
|
|
112
|
-
// Log to console with colors
|
|
180
|
+
const message = stringifyLogData(data);
|
|
181
|
+
// Console colorata (il livello file resta strutturato).
|
|
113
182
|
switch (level) {
|
|
114
183
|
case LogLevels.INFO:
|
|
115
|
-
console.info((0, colorette_1.blue)(`[INFO][${now}][${fileName}]`),
|
|
184
|
+
console.info((0, colorette_1.blue)(`[INFO][${now}][${fileName}]`), message);
|
|
116
185
|
break;
|
|
117
186
|
case LogLevels.ERROR:
|
|
118
|
-
console.error((0, colorette_1.red)(`[ERROR][${now}][${fileName}]`),
|
|
187
|
+
console.error((0, colorette_1.red)(`[ERROR][${now}][${fileName}]`), message);
|
|
119
188
|
break;
|
|
120
189
|
case LogLevels.DEBUG:
|
|
121
|
-
console.debug((0, colorette_1.magenta)(`[DEBUG][${now}][${fileName}]`),
|
|
190
|
+
console.debug((0, colorette_1.magenta)(`[DEBUG][${now}][${fileName}]`), message);
|
|
122
191
|
break;
|
|
123
192
|
case LogLevels.WARNING:
|
|
124
|
-
console.debug((0, colorette_1.yellow)(`[WARNING][${now}][${fileName}]`),
|
|
193
|
+
console.debug((0, colorette_1.yellow)(`[WARNING][${now}][${fileName}]`), message);
|
|
125
194
|
break;
|
|
126
195
|
case LogLevels.LOG:
|
|
127
|
-
console.log((0, colorette_1.cyan)(`[LOG][${now}][${fileName}]`),
|
|
196
|
+
console.log((0, colorette_1.cyan)(`[LOG][${now}][${fileName}]`), message);
|
|
128
197
|
break;
|
|
129
198
|
case LogLevels.DATABASE:
|
|
130
|
-
console.log((0, colorette_1.green)(`[DATABASE][${now}][${fileName}]`),
|
|
199
|
+
console.log((0, colorette_1.green)(`[DATABASE][${now}][${fileName}]`), message);
|
|
131
200
|
break;
|
|
132
201
|
}
|
|
133
|
-
|
|
134
|
-
|
|
202
|
+
this.winstonLogger.log({
|
|
203
|
+
level: level === LogLevels.LOG ? 'general' : level.toLowerCase(),
|
|
204
|
+
message,
|
|
205
|
+
tag: this.tag,
|
|
206
|
+
file: fileName,
|
|
207
|
+
time: now,
|
|
208
|
+
});
|
|
135
209
|
}
|
|
136
210
|
static createLogger(tag, config) {
|
|
137
211
|
return new Logger(tag, config);
|
|
138
212
|
}
|
|
139
213
|
}
|
|
140
214
|
exports.Logger = Logger;
|
|
215
|
+
/** Logger winston condivisi per directory, così da non moltiplicare transport e timer. */
|
|
216
|
+
Logger.sharedLoggers = new Map();
|
|
217
|
+
Logger.colorsRegistered = false;
|
|
141
218
|
//# sourceMappingURL=Logger.js.map
|
package/dist/Logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":"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","sourcesContent":["import winston from \"winston\";\nimport { DailyFileTransport } from './DailyFileTransport';\nimport { blue, red, magenta, green, cyan, yellow } from 'colorette';\n\nexport enum LogLevels {\n INFO = \"INFO\",\n ERROR = \"ERROR\",\n WARNING = \"WARNING\",\n DEBUG = \"DEBUG\",\n LOG = \"LOG\",\n DATABASE = \"DATABASE\",\n}\n\nexport class Logger {\n private readonly winstonLogger: winston.Logger;\n private readonly tag: string;\n private readonly logDirectory: string;\n private logFormat: winston.Logform.Format;\n\n constructor(\n tag: string,\n config?: {\n logDirectory?: string;\n customFormat?: winston.Logform.Format;\n transports?: winston.transport[];\n }\n ) {\n this.tag = tag || \"[UNTAGGED]\";\n this.logDirectory = config?.logDirectory || \"logs\";\n\n // Default log format\n this.logFormat =\n config?.customFormat ||\n winston.format.printf(({ timestamp, file, level, message, ...meta }) => {\n return JSON.stringify({\n timestamp: timestamp || new Date().toISOString(),\n tag: this.tag,\n file: this.replaceAll(file + \"\", \"\\\\\", \"/\"),\n level: level === 'general' ? 'log' : level,\n message,\n ...meta,\n });\n });\n\n // Configure logger\n this.winstonLogger = winston.createLogger({\n level: 'database',\n format: winston.format.combine(winston.format.timestamp(), this.logFormat),\n transports: config?.transports || [\n new DailyFileTransport(this.logDirectory),\n ],\n levels: {\n error: 1,\n warning: 2,\n info: 3,\n general: 3,\n http: 4,\n verbose: 5,\n debug: 6,\n silly: 7,\n database: 8,\n },\n });\n\n // Add colors for console logging\n winston.addColors({\n database: \"green\",\n error: \"red\",\n warning: \"yellow\",\n info: \"blue\",\n debug: \"magenta\",\n log: \"cyan\",\n });\n }\n\n private replaceAll(string: string, match: string, replacer: string) {\n return string.split(match).join(replacer);\n }\n\n public execStart(prefix: string = \"\"): number {\n this.print(LogLevels.INFO, `${prefix} - Execution started`);\n return performance.now();\n }\n\n public execStop(prefix: string = \"\", startTime: number, error: boolean = false): void {\n const executionTime = performance.now() - startTime;\n const message = `${prefix} - Execution ended ${error ? \"due to an error\" : \"successfully\"\n }. Execution time: ${executionTime.toFixed(2)} ms`;\n this.print(error ? LogLevels.ERROR : LogLevels.INFO, message);\n }\n\n public info(...data: Object[]): void {\n this.print(LogLevels.INFO, ...data);\n }\n\n public dbLog(...data: Object[]): void {\n this.print(LogLevels.DATABASE, ...data);\n }\n\n public debug(...data: Object[]): void {\n this.print(LogLevels.DEBUG, ...data);\n }\n\n public warning(...data: Object[]): void {\n this.print(LogLevels.WARNING, ...data);\n }\n\n public log(...data: Object[]): void {\n this.print(LogLevels.LOG, ...data);\n }\n\n public error(...data: Object[]): void {\n this.print(LogLevels.ERROR, ...data);\n }\n\n private print(level: LogLevels, ...data: Object[]): void {\n const now: Date = new Date();\n const fileName = this.tag.split(\"\\\\\").pop() || this.tag;\n\n // Attach metadata to Winston logger\n this.winstonLogger.defaultMeta = {\n file: fileName,\n time: now,\n };\n\n const logEntry: winston.LogEntry = {\n level: level === LogLevels.LOG ? 'general' : level.toLowerCase(),\n message: [...data].join(\",\"),\n };\n\n // Log to console with colors\n switch (level) {\n case LogLevels.INFO:\n console.info(blue(`[INFO][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.ERROR:\n console.error(red(`[ERROR][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.DEBUG:\n console.debug(magenta(`[DEBUG][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.WARNING:\n console.debug(yellow(`[WARNING][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.LOG:\n console.log(cyan(`[LOG][${now}][${fileName}]`), logEntry.message);\n break;\n case LogLevels.DATABASE:\n console.log(green(`[DATABASE][${now}][${fileName}]`), logEntry.message);\n break;\n }\n\n // Log to file\n this.winstonLogger.log(logEntry);\n }\n\n public static createLogger(tag: string, config?: { logDirectory?: string }): Logger {\n return new Logger(tag, config);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":"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","sourcesContent":["import winston from \"winston\";\nimport { DailyFileTransport } from './DailyFileTransport';\nimport { blue, red, magenta, green, cyan, yellow } from 'colorette';\n\nexport enum LogLevels {\n INFO = \"INFO\",\n ERROR = \"ERROR\",\n WARNING = \"WARNING\",\n DEBUG = \"DEBUG\",\n LOG = \"LOG\",\n DATABASE = \"DATABASE\",\n}\n\n/** Livelli winston usati dal logger (comprende `database` e `general`). */\nconst WIN_LEVELS = {\n error: 1,\n warning: 2,\n info: 3,\n general: 3,\n http: 4,\n verbose: 5,\n debug: 6,\n silly: 7,\n database: 8,\n};\n\n/** Chiavi i cui valori non devono mai finire nei log. */\nconst SENSITIVE_KEY_PATTERN = /(password|passwd|pwd|secret|token|authorization|apikey|api_key|cookie)/i;\nconst REDACTED = '[REDACTED]';\n\n/**\n * Serializza un valore per il log, redigendo i campi sensibili e risolvendo\n * `Error` e riferimenti circolari (che altrimenti diventano `[object Object]`).\n */\nfunction serializeLogValue(value: unknown, seen: WeakSet<object>): unknown {\n if (value instanceof Error) {\n return { name: value.name, message: value.message, stack: value.stack };\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => serializeLogValue(item, seen));\n }\n\n if (value && typeof value === 'object') {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n\n const result: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(value as Record<string, unknown>)) {\n result[key] = SENSITIVE_KEY_PATTERN.test(key) ? REDACTED : serializeLogValue(nested, seen);\n }\n return result;\n }\n\n return value;\n}\n\n/** Costruisce il messaggio testuale del log a partire dagli argomenti. */\nfunction stringifyLogData(data: unknown[]): string {\n return data.map((value) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value instanceof Error) {\n return value.stack ?? `${value.name}: ${value.message}`;\n }\n if (value === undefined) {\n return 'undefined';\n }\n if (value === null) {\n return 'null';\n }\n try {\n return JSON.stringify(serializeLogValue(value, new WeakSet()));\n } catch {\n return String(value);\n }\n }).join(', ');\n}\n\n/** Formato condiviso: JSON a una riga, con tag/file/level/messaggio. */\nfunction defaultFormat(): winston.Logform.Format {\n return winston.format.printf(({ timestamp, tag, file, level, message, ...meta }) => JSON.stringify({\n timestamp: timestamp || new Date().toISOString(),\n tag,\n file: String(file ?? '').split('\\\\').join('/'),\n level: level === 'general' ? 'log' : level,\n message,\n ...meta,\n }));\n}\n\n/**\n * Logger strutturato dell'applicazione.\n *\n * - I log finiscono su console (colorati) e su file JSON giornaliero.\n * - Le istanze con la stessa `logDirectory` condividono un unico logger winston\n * (un solo transport/timer), evitando di crearne uno per classe.\n * - I campi sensibili (password, token, secret, ...) sono redatti automaticamente.\n */\nexport class Logger {\n private readonly winstonLogger: winston.Logger;\n private readonly tag: string;\n private readonly logDirectory: string;\n private readonly maxLevel: number;\n\n /** Logger winston condivisi per directory, così da non moltiplicare transport e timer. */\n private static readonly sharedLoggers = new Map<string, winston.Logger>();\n private static colorsRegistered = false;\n\n constructor(\n tag: string,\n config?: {\n logDirectory?: string;\n customFormat?: winston.Logform.Format;\n transports?: winston.transport[];\n /** Livello minimo loggato: `error`..`database` (default `database`, ovvero tutto). Override con `LOG_LEVEL`. */\n level?: string;\n }\n ) {\n this.tag = tag || \"[UNTAGGED]\";\n this.logDirectory = config?.logDirectory || \"logs\";\n\n const configuredLevel = (config?.level ?? process.env.LOG_LEVEL ?? 'database').toLowerCase();\n this.maxLevel = WIN_LEVELS[configuredLevel as keyof typeof WIN_LEVELS] ?? WIN_LEVELS.database;\n\n const format = winston.format.combine(\n winston.format.timestamp(),\n config?.customFormat || defaultFormat(),\n );\n\n this.winstonLogger = config?.transports\n ? winston.createLogger({ level: 'database', format, transports: config.transports, levels: WIN_LEVELS })\n : Logger.resolveSharedLogger(this.logDirectory, format);\n\n if (!Logger.colorsRegistered) {\n winston.addColors({\n database: \"green\",\n error: \"red\",\n warning: \"yellow\",\n info: \"blue\",\n debug: \"magenta\",\n log: \"cyan\",\n });\n Logger.colorsRegistered = true;\n }\n }\n\n private static resolveSharedLogger(logDirectory: string, format: winston.Logform.Format): winston.Logger {\n const existing = Logger.sharedLoggers.get(logDirectory);\n if (existing) {\n return existing;\n }\n\n const logger = winston.createLogger({\n level: 'database',\n format,\n transports: [new DailyFileTransport(logDirectory)],\n levels: WIN_LEVELS,\n });\n Logger.sharedLoggers.set(logDirectory, logger);\n return logger;\n }\n\n public execStart(prefix: string = \"\"): number {\n this.print(LogLevels.INFO, `${prefix} - Execution started`);\n return performance.now();\n }\n\n public execStop(prefix: string = \"\", startTime: number, error: boolean = false): void {\n const executionTime = performance.now() - startTime;\n const message = `${prefix} - Execution ended ${error ? \"due to an error\" : \"successfully\"\n }. Execution time: ${executionTime.toFixed(2)} ms`;\n this.print(error ? LogLevels.ERROR : LogLevels.INFO, message);\n }\n\n public info(...data: unknown[]): void {\n this.print(LogLevels.INFO, ...data);\n }\n\n public dbLog(...data: unknown[]): void {\n this.print(LogLevels.DATABASE, ...data);\n }\n\n public debug(...data: unknown[]): void {\n this.print(LogLevels.DEBUG, ...data);\n }\n\n public warning(...data: unknown[]): void {\n this.print(LogLevels.WARNING, ...data);\n }\n\n public log(...data: unknown[]): void {\n this.print(LogLevels.LOG, ...data);\n }\n\n public error(...data: unknown[]): void {\n this.print(LogLevels.ERROR, ...data);\n }\n\n private print(level: LogLevels, ...data: unknown[]): void {\n const rank = level === LogLevels.LOG ? WIN_LEVELS.general : (WIN_LEVELS[level.toLowerCase() as keyof typeof WIN_LEVELS] ?? WIN_LEVELS.database);\n if (rank > this.maxLevel) {\n return;\n }\n\n const now: Date = new Date();\n const fileName = this.tag.split(\"\\\\\").pop() || this.tag;\n const message = stringifyLogData(data);\n\n // Console colorata (il livello file resta strutturato).\n switch (level) {\n case LogLevels.INFO:\n console.info(blue(`[INFO][${now}][${fileName}]`), message);\n break;\n case LogLevels.ERROR:\n console.error(red(`[ERROR][${now}][${fileName}]`), message);\n break;\n case LogLevels.DEBUG:\n console.debug(magenta(`[DEBUG][${now}][${fileName}]`), message);\n break;\n case LogLevels.WARNING:\n console.debug(yellow(`[WARNING][${now}][${fileName}]`), message);\n break;\n case LogLevels.LOG:\n console.log(cyan(`[LOG][${now}][${fileName}]`), message);\n break;\n case LogLevels.DATABASE:\n console.log(green(`[DATABASE][${now}][${fileName}]`), message);\n break;\n }\n\n this.winstonLogger.log({\n level: level === LogLevels.LOG ? 'general' : level.toLowerCase(),\n message,\n tag: this.tag,\n file: fileName,\n time: now,\n });\n }\n\n public static createLogger(tag: string, config?: { logDirectory?: string }): Logger {\n return new Logger(tag, config);\n }\n}\n"]}
|
package/dist/Orm.d.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
|
-
import { Database, Options, Transaction } from "node-firebird";
|
|
1
|
+
import { Database, Options, QueryParams, Transaction } from "node-firebird";
|
|
2
2
|
export declare class Orm {
|
|
3
3
|
private static logger;
|
|
4
|
+
private static pools;
|
|
4
5
|
static quote(value: string): string;
|
|
6
|
+
/** Dimensione pool: default 5 (pool attivo); `poolSize: 0` disabilita e torna all'attach per query. */
|
|
7
|
+
private static getPoolSize;
|
|
8
|
+
private static shouldLogQueryParameters;
|
|
9
|
+
private static formatQueryForLog;
|
|
10
|
+
private static buildPoolKey;
|
|
11
|
+
/**
|
|
12
|
+
* Chiude tutti i pool creati (opt-in `poolSize`). Utile a fine processo o nei test,
|
|
13
|
+
* perché i pool mantengono connessioni e timer attivi.
|
|
14
|
+
*/
|
|
15
|
+
static closePools(): Promise<void>;
|
|
16
|
+
private static getPool;
|
|
5
17
|
private static getTimeoutMs;
|
|
6
18
|
private static createTimeoutError;
|
|
7
19
|
private static detachQuietly;
|
|
@@ -9,16 +21,24 @@ export declare class Orm {
|
|
|
9
21
|
private static normalizeResultValue;
|
|
10
22
|
private static attachWithTimeout;
|
|
11
23
|
static testConnection(options: Options): Promise<boolean>;
|
|
12
|
-
static query(options: Options, query: string, parameters?:
|
|
13
|
-
static execute(options: Options, query: string, parameters?:
|
|
14
|
-
static trimParam(param:
|
|
24
|
+
static query<T = Record<string, unknown>>(options: Options, query: string, parameters?: QueryParams, logQuery?: boolean): Promise<T[]>;
|
|
25
|
+
static execute<T = Record<string, unknown>>(options: Options, query: string, parameters?: QueryParams, logQuery?: boolean): Promise<T[]>;
|
|
26
|
+
static trimParam<T>(param: T): string | T;
|
|
15
27
|
static connect(options: Options): Promise<Database>;
|
|
28
|
+
/**
|
|
29
|
+
* Runs `operation` inside a single Firebird transaction: commit on success,
|
|
30
|
+
* rollback on failure, detach in every case. Use it to make multi-statement
|
|
31
|
+
* writes atomic instead of relying on auto-commit per statement.
|
|
32
|
+
*/
|
|
33
|
+
static withTransaction<T>(options: Options, operation: (transaction: Transaction) => Promise<T>): Promise<T>;
|
|
34
|
+
/** Esegue una query su una transazione esistente e ne restituisce il risultato. */
|
|
35
|
+
static transactionQuery<T = unknown>(transaction: Transaction, query: string, parameters?: QueryParams): Promise<T>;
|
|
16
36
|
static startTransaction(db: Database): Promise<Transaction>;
|
|
17
37
|
static commitTransaction(transaction: Transaction): Promise<string>;
|
|
18
38
|
static rollbackTransaction(transaction: Transaction): Promise<string>;
|
|
19
39
|
static executeMultiple(options: Options, queriesWithParams: {
|
|
20
40
|
query: string;
|
|
21
|
-
params:
|
|
41
|
+
params: QueryParams;
|
|
22
42
|
}[]): Promise<string>;
|
|
23
|
-
static executeQueries(transaction: Transaction, queries: string[], params:
|
|
43
|
+
static executeQueries(transaction: Transaction, queries: string[], params: QueryParams[]): Promise<unknown>;
|
|
24
44
|
}
|