node-server-engine 1.1.4 → 1.1.6
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/.env.example +193 -193
- package/.mocharc.js +13 -13
- package/.nycrc +18 -18
- package/.prettierrc +7 -7
- package/Dockerfile +30 -30
- package/README.md +991 -991
- package/babel.config.json +34 -35
- package/dist/const/DebeziumEvent.js.map +1 -1
- package/dist/const/LogSeverity.js.map +1 -1
- package/dist/const/index.js.map +1 -1
- package/dist/const/metrics.js.map +1 -1
- package/dist/const/mime.js.map +1 -1
- package/dist/const/tokenIssuer.js.map +1 -1
- package/dist/db/migrations/20241030121500-create-sequelize-meta-table.js.map +1 -1
- package/dist/db/models/SequelizeMeta.js +1 -0
- package/dist/db/models/SequelizeMeta.js.map +1 -1
- package/dist/db/models/index.js.map +1 -1
- package/dist/entities/ElasticSearch/ElasticSearch.js +7 -7
- package/dist/entities/ElasticSearch/ElasticSearch.js.map +1 -1
- package/dist/entities/ElasticSearch/ElasticSearch.types.js.map +1 -1
- package/dist/entities/ElasticSearch/index.js.map +1 -1
- package/dist/entities/Endpoint/Endpoint.js +18 -17
- package/dist/entities/Endpoint/Endpoint.js.map +1 -1
- package/dist/entities/Endpoint/Endpoint.types.js.map +1 -1
- package/dist/entities/Endpoint/index.js.map +1 -1
- package/dist/entities/EngineError/EngineError.js +7 -6
- package/dist/entities/EngineError/EngineError.js.map +1 -1
- package/dist/entities/EngineError/EngineError.types.js.map +1 -1
- package/dist/entities/EngineError/index.js.map +1 -1
- package/dist/entities/KeySet/KeySet.js +10 -9
- package/dist/entities/KeySet/KeySet.js.map +1 -1
- package/dist/entities/KeySet/KeySet.types.js.map +1 -1
- package/dist/entities/KeySet/index.js.map +1 -1
- package/dist/entities/LifecycleController/LifecycleController.js.map +1 -1
- package/dist/entities/LifecycleController/LifecycleController.types.js.map +1 -1
- package/dist/entities/LifecycleController/index.js.map +1 -1
- package/dist/entities/Localizator/Localizator.js +7 -7
- package/dist/entities/Localizator/Localizator.js.map +1 -1
- package/dist/entities/Localizator/Localizator.types.js.map +1 -1
- package/dist/entities/Localizator/guessNamingConvention/guessNamingConvention.js.map +1 -1
- package/dist/entities/Localizator/guessNamingConvention/index.js.map +1 -1
- package/dist/entities/Localizator/index.js.map +1 -1
- package/dist/entities/MessageHandler/MessageHandler.js +7 -6
- package/dist/entities/MessageHandler/MessageHandler.js.map +1 -1
- package/dist/entities/MessageHandler/MessageHandler.types.js.map +1 -1
- package/dist/entities/MessageHandler/index.js.map +1 -1
- package/dist/entities/PubSub/PubSub.js +25 -25
- package/dist/entities/PubSub/PubSub.js.map +1 -1
- package/dist/entities/PubSub/PubSub.types.js.map +1 -1
- package/dist/entities/PubSub/handleMessage/handleMessage.js +6 -6
- package/dist/entities/PubSub/handleMessage/handleMessage.js.map +1 -1
- package/dist/entities/PubSub/handleMessage/index.js.map +1 -1
- package/dist/entities/PubSub/index.js.map +1 -1
- package/dist/entities/PushNotification/PushNotification.js +4 -4
- package/dist/entities/PushNotification/PushNotification.js.map +1 -1
- package/dist/entities/PushNotification/PushNotification.types.js.map +1 -1
- package/dist/entities/PushNotification/index.js.map +1 -1
- package/dist/entities/Redis/Redis.js +8 -8
- package/dist/entities/Redis/Redis.js.map +1 -1
- package/dist/entities/Redis/Redis.types.js.map +1 -1
- package/dist/entities/Redis/Redis.validate.js +2 -2
- package/dist/entities/Redis/Redis.validate.js.map +1 -1
- package/dist/entities/Redis/index.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.config.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.js +2 -2
- package/dist/entities/Sequelize/Sequelize.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.types.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.validate.js +2 -2
- package/dist/entities/Sequelize/Sequelize.validate.js.map +1 -1
- package/dist/entities/Sequelize/index.js.map +1 -1
- package/dist/entities/Server/Server.const.js.map +1 -1
- package/dist/entities/Server/Server.js +18 -17
- package/dist/entities/Server/Server.js.map +1 -1
- package/dist/entities/Server/Server.types.js.map +1 -1
- package/dist/entities/Server/index.js.map +1 -1
- package/dist/entities/SocketClient/SocketClient.js +33 -32
- package/dist/entities/SocketClient/SocketClient.js.map +1 -1
- package/dist/entities/SocketClient/SocketClient.types.js.map +1 -1
- package/dist/entities/SocketClient/index.js.map +1 -1
- package/dist/entities/SocketClient/parseMessage/index.js.map +1 -1
- package/dist/entities/SocketClient/parseMessage/parseMessage.js +2 -2
- package/dist/entities/SocketClient/parseMessage/parseMessage.js.map +1 -1
- package/dist/entities/Storage/Storage.js +20 -20
- package/dist/entities/Storage/Storage.js.map +1 -1
- package/dist/entities/Storage/Storage.types.js.map +1 -1
- package/dist/entities/Storage/index.js.map +1 -1
- package/dist/entities/ValidationError/ValidationError.js.map +1 -1
- package/dist/entities/ValidationError/index.js.map +1 -1
- package/dist/entities/WebError/WebError.js +7 -6
- package/dist/entities/WebError/WebError.js.map +1 -1
- package/dist/entities/WebError/WebError.types.js.map +1 -1
- package/dist/entities/WebError/index.js.map +1 -1
- package/dist/entities/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics/debug.js.map +1 -1
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/request.js.map +1 -1
- package/dist/middleware/authAdmin/authAdmin.js.map +1 -1
- package/dist/middleware/authAdmin/authAdmin.types.js.map +1 -1
- package/dist/middleware/authAdmin/index.js.map +1 -1
- package/dist/middleware/authHmac/authHmac.js.map +1 -1
- package/dist/middleware/authHmac/authHmac.types.js.map +1 -1
- package/dist/middleware/authHmac/index.js.map +1 -1
- package/dist/middleware/authJwt/authJwt.js.map +1 -1
- package/dist/middleware/authJwt/authJwt.types.js.map +1 -1
- package/dist/middleware/authJwt/index.js.map +1 -1
- package/dist/middleware/authStatic/authStatic.js +3 -3
- package/dist/middleware/authStatic/authStatic.js.map +1 -1
- package/dist/middleware/authStatic/index.js.map +1 -1
- package/dist/middleware/authTls/authTls.js +8 -8
- package/dist/middleware/authTls/authTls.js.map +1 -1
- package/dist/middleware/authTls/authTls.types.js.map +1 -1
- package/dist/middleware/authTls/index.js.map +1 -1
- package/dist/middleware/checkPermission/checkPermission.js.map +1 -1
- package/dist/middleware/error/error.js.map +1 -1
- package/dist/middleware/error/index.js.map +1 -1
- package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js +2 -2
- package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js.map +1 -1
- package/dist/middleware/fileUploader/compressAvatar/compressAvatar.types.js.map +1 -1
- package/dist/middleware/fileUploader/compressAvatar/index.js.map +1 -1
- package/dist/middleware/fileUploader/fileUploader.js +12 -12
- package/dist/middleware/fileUploader/fileUploader.js.map +1 -1
- package/dist/middleware/fileUploader/fileUploader.types.js.map +1 -1
- package/dist/middleware/fileUploader/index.js.map +1 -1
- package/dist/middleware/fileUploader/isMultiPart/index.js.map +1 -1
- package/dist/middleware/fileUploader/isMultiPart/isMultipart.js.map +1 -1
- package/dist/middleware/fileUploader/validate/index.js.map +1 -1
- package/dist/middleware/fileUploader/validate/validate.js.map +1 -1
- package/dist/middleware/fourOhFour/fourOhFour.js.map +1 -1
- package/dist/middleware/fourOhFour/index.js.map +1 -1
- package/dist/middleware/geminiFileUploader/geminiFileUploader.js.map +1 -1
- package/dist/middleware/geminiFileUploader/index.js.map +1 -1
- package/dist/middleware/healthCheck/healthCheck.js +2 -2
- package/dist/middleware/healthCheck/healthCheck.js.map +1 -1
- package/dist/middleware/healthCheck/index.js.map +1 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/metrics/index.js.map +1 -1
- package/dist/middleware/metrics/metrics.js.map +1 -1
- package/dist/middleware/requestMetrics/index.js.map +1 -1
- package/dist/middleware/requestMetrics/requestMetrics.js.map +1 -1
- package/dist/middleware/swaggerDocs/index.js.map +1 -1
- package/dist/middleware/swaggerDocs/swaggerDocs.js +7 -7
- package/dist/middleware/swaggerDocs/swaggerDocs.js.map +1 -1
- package/dist/middleware/swaggerDocs/swaggerDocs.types.js.map +1 -1
- package/dist/middleware/userResolver/index.js.map +1 -1
- package/dist/middleware/userResolver/userResolver.js.map +1 -1
- package/dist/middleware/validate/index.js.map +1 -1
- package/dist/middleware/validate/validate.js.map +1 -1
- package/dist/middleware/version/index.js.map +1 -1
- package/dist/middleware/version/version.js +3 -3
- package/dist/middleware/version/version.js.map +1 -1
- package/dist/utils/checkEnvironment/index.js +13 -13
- package/dist/utils/checkEnvironment/index.js.map +1 -1
- package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
- package/dist/utils/createHttpServer/createHttpServer.validate.js +2 -2
- package/dist/utils/createHttpServer/createHttpServer.validate.js.map +1 -1
- package/dist/utils/createHttpServer/index.js.map +1 -1
- package/dist/utils/createSortedObject/createSortedObject.js.map +1 -1
- package/dist/utils/createSortedObject/index.js.map +1 -1
- package/dist/utils/dbMigration/dbMigration.js +8 -8
- package/dist/utils/dbMigration/dbMigration.js.map +1 -1
- package/dist/utils/dbMigration/dbMigration.types.js.map +1 -1
- package/dist/utils/dbMigration/index.js.map +1 -1
- package/dist/utils/dbMigration/migrateMetadataTable/index.js.map +1 -1
- package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js +4 -4
- package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js.map +1 -1
- package/dist/utils/envAssert/envAssert.js +6 -6
- package/dist/utils/envAssert/envAssert.js.map +1 -1
- package/dist/utils/envAssert/index.js.map +1 -1
- package/dist/utils/envAssert/validators/hostList.js +2 -2
- package/dist/utils/envAssert/validators/hostList.js.map +1 -1
- package/dist/utils/envAssert/validators/index.js.map +1 -1
- package/dist/utils/envAssert/validators/ipList.js +2 -2
- package/dist/utils/envAssert/validators/ipList.js.map +1 -1
- package/dist/utils/envAssert/validators/path.js +2 -2
- package/dist/utils/envAssert/validators/path.js.map +1 -1
- package/dist/utils/envAssert/validators/string.js +2 -2
- package/dist/utils/envAssert/validators/string.js.map +1 -1
- package/dist/utils/envAssert/validators/stringList.js +3 -3
- package/dist/utils/envAssert/validators/stringList.js.map +1 -1
- package/dist/utils/filter/filter.js +4 -4
- package/dist/utils/filter/filter.js.map +1 -1
- package/dist/utils/filter/index.js.map +1 -1
- package/dist/utils/getDynamicLink/getDynamicLink.js.map +1 -1
- package/dist/utils/getDynamicLink/getDynamicLink.types.js.map +1 -1
- package/dist/utils/getDynamicLink/getDynamicLink.validate.js.map +1 -1
- package/dist/utils/getDynamicLink/index.js.map +1 -1
- package/dist/utils/hmac/checkEnv/checkEnv.js +2 -2
- package/dist/utils/hmac/checkEnv/checkEnv.js.map +1 -1
- package/dist/utils/hmac/checkEnv/index.js.map +1 -1
- package/dist/utils/hmac/createHmac/createHmac.js.map +1 -1
- package/dist/utils/hmac/createHmac/index.js.map +1 -1
- package/dist/utils/hmac/index.js.map +1 -1
- package/dist/utils/hmac/index.types.js.map +1 -1
- package/dist/utils/hmac/signPayload/index.js.map +1 -1
- package/dist/utils/hmac/signPayload/signPayload.js.map +1 -1
- package/dist/utils/hmac/verifySignature/index.js.map +1 -1
- package/dist/utils/hmac/verifySignature/verifySignature.js.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/jwt/index.js.map +1 -1
- package/dist/utils/jwt/jwt.js.map +1 -1
- package/dist/utils/jwt/jwt.types.js.map +1 -1
- package/dist/utils/report/index.js.map +1 -1
- package/dist/utils/report/output.js.map +1 -1
- package/dist/utils/report/output.types.js.map +1 -1
- package/dist/utils/report/report.js.map +1 -1
- package/dist/utils/report/report.types.js.map +1 -1
- package/dist/utils/request/index.js.map +1 -1
- package/dist/utils/request/request.js.map +1 -1
- package/dist/utils/semverCompare/index.js.map +1 -1
- package/dist/utils/semverCompare/semverCompare.js +5 -5
- package/dist/utils/semverCompare/semverCompare.js.map +1 -1
- package/dist/utils/sendEmail/index.js.map +1 -1
- package/dist/utils/sendEmail/sendEmail.js +8 -8
- package/dist/utils/sendEmail/sendEmail.js.map +1 -1
- package/dist/utils/sendEmail/sendEmail.types.js.map +1 -1
- package/dist/utils/sendPush/index.js.map +1 -1
- package/dist/utils/sendPush/sendPush.js +5 -5
- package/dist/utils/sendPush/sendPush.js.map +1 -1
- package/dist/utils/sendPush/sendPush.types.js.map +1 -1
- package/dist/utils/tlsConfig/index.js.map +1 -1
- package/dist/utils/tlsConfig/tlsConfig.js +2 -2
- package/dist/utils/tlsConfig/tlsConfig.js.map +1 -1
- package/dist/utils/tlsConfig/tlsConfig.types.js.map +1 -1
- package/dist/utils/tlsConfig/tlsConfig.validate.js +2 -2
- package/dist/utils/tlsConfig/tlsConfig.validate.js.map +1 -1
- package/dist/utils/tlsRequest/index.js.map +1 -1
- package/dist/utils/tlsRequest/tlsRequest.js.map +1 -1
- package/dist/utils/trimPathSlash/index.js.map +1 -1
- package/dist/utils/trimPathSlash/trimPathSlash.js +4 -4
- package/dist/utils/trimPathSlash/trimPathSlash.js.map +1 -1
- package/eslint.config.mjs +11 -11
- package/package.json +159 -164
- package/src/const/DebeziumEvent.ts +6 -6
- package/src/const/LogSeverity.ts +7 -7
- package/src/const/index.ts +5 -5
- package/src/const/metrics.ts +6 -6
- package/src/const/mime.ts +37 -37
- package/src/const/tokenIssuer.ts +9 -9
- package/src/db/migrations/20241030121500-create-sequelize-meta-table.ts +29 -29
- package/src/db/models/SequelizeMeta.ts +16 -16
- package/src/db/models/index.ts +2 -2
- package/src/entities/ElasticSearch/ElasticSearch.ts +103 -103
- package/src/entities/ElasticSearch/ElasticSearch.types.ts +7 -7
- package/src/entities/ElasticSearch/index.ts +2 -2
- package/src/entities/Endpoint/Endpoint.test.ts +337 -337
- package/src/entities/Endpoint/Endpoint.ts +202 -202
- package/src/entities/Endpoint/Endpoint.types.ts +205 -205
- package/src/entities/Endpoint/index.ts +2 -2
- package/src/entities/EngineError/EngineError.ts +28 -28
- package/src/entities/EngineError/EngineError.types.ts +15 -15
- package/src/entities/EngineError/index.ts +2 -2
- package/src/entities/KeySet/KeySet.test.ts +126 -126
- package/src/entities/KeySet/KeySet.ts +172 -172
- package/src/entities/KeySet/KeySet.types.ts +28 -28
- package/src/entities/KeySet/index.ts +2 -2
- package/src/entities/LifecycleController/LifecycleController.test.ts +48 -48
- package/src/entities/LifecycleController/LifecycleController.ts +24 -24
- package/src/entities/LifecycleController/LifecycleController.types.ts +5 -5
- package/src/entities/LifecycleController/index.ts +2 -2
- package/src/entities/Localizator/Localizator.ts +139 -139
- package/src/entities/Localizator/Localizator.types.ts +52 -52
- package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.test.ts +165 -165
- package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.ts +58 -58
- package/src/entities/Localizator/guessNamingConvention/index.ts +1 -1
- package/src/entities/Localizator/index.ts +2 -2
- package/src/entities/MessageHandler/MessageHandler.test.ts +130 -130
- package/src/entities/MessageHandler/MessageHandler.ts +72 -72
- package/src/entities/MessageHandler/MessageHandler.types.ts +15 -15
- package/src/entities/MessageHandler/index.ts +2 -2
- package/src/entities/PubSub/PubSub.test.ts +297 -297
- package/src/entities/PubSub/PubSub.ts +202 -202
- package/src/entities/PubSub/PubSub.types.ts +76 -76
- package/src/entities/PubSub/handleMessage/handleMessage.test.ts +102 -102
- package/src/entities/PubSub/handleMessage/handleMessage.ts +65 -65
- package/src/entities/PubSub/handleMessage/index.ts +1 -1
- package/src/entities/PubSub/index.ts +2 -2
- package/src/entities/PushNotification/PushNotification.test.ts +35 -35
- package/src/entities/PushNotification/PushNotification.ts +44 -44
- package/src/entities/PushNotification/PushNotification.types.ts +25 -25
- package/src/entities/PushNotification/index.ts +2 -2
- package/src/entities/Redis/Redis.ts +71 -71
- package/src/entities/Redis/Redis.types.ts +19 -19
- package/src/entities/Redis/Redis.validate.ts +17 -17
- package/src/entities/Redis/index.ts +2 -2
- package/src/entities/Sequelize/Sequelize.config.ts +59 -59
- package/src/entities/Sequelize/Sequelize.test.ts +21 -21
- package/src/entities/Sequelize/Sequelize.ts +75 -75
- package/src/entities/Sequelize/Sequelize.types.ts +10 -10
- package/src/entities/Sequelize/Sequelize.validate.ts +15 -15
- package/src/entities/Sequelize/index.ts +2 -2
- package/src/entities/Server/Server.const.ts +56 -56
- package/src/entities/Server/Server.test.ts +272 -272
- package/src/entities/Server/Server.ts +445 -445
- package/src/entities/Server/Server.types.ts +88 -88
- package/src/entities/Server/index.ts +2 -2
- package/src/entities/SocketClient/SocketClient.test.ts +392 -392
- package/src/entities/SocketClient/SocketClient.ts +401 -401
- package/src/entities/SocketClient/SocketClient.types.ts +62 -62
- package/src/entities/SocketClient/index.ts +2 -2
- package/src/entities/SocketClient/parseMessage/index.ts +1 -1
- package/src/entities/SocketClient/parseMessage/parseMessage.test.ts +20 -20
- package/src/entities/SocketClient/parseMessage/parseMessage.ts +26 -26
- package/src/entities/Storage/Storage.test.ts +58 -58
- package/src/entities/Storage/Storage.ts +219 -219
- package/src/entities/Storage/Storage.types.ts +57 -57
- package/src/entities/Storage/index.ts +2 -2
- package/src/entities/ValidationError/ValidationError.ts +34 -34
- package/src/entities/ValidationError/index.ts +1 -1
- package/src/entities/WebError/WebError.test.ts +18 -18
- package/src/entities/WebError/WebError.ts +23 -23
- package/src/entities/WebError/WebError.types.ts +9 -9
- package/src/entities/WebError/index.ts +2 -2
- package/src/entities/index.ts +16 -16
- package/src/index.ts +4 -4
- package/src/metrics/debug.ts +10 -10
- package/src/metrics/index.ts +2 -2
- package/src/metrics/request.ts +17 -17
- package/src/middleware/authAdmin/authAdmin.test.ts +199 -199
- package/src/middleware/authAdmin/authAdmin.ts +114 -114
- package/src/middleware/authAdmin/authAdmin.types.ts +19 -19
- package/src/middleware/authAdmin/index.ts +2 -2
- package/src/middleware/authHmac/authHmac.test.ts +86 -86
- package/src/middleware/authHmac/authHmac.ts +56 -56
- package/src/middleware/authHmac/authHmac.types.ts +7 -7
- package/src/middleware/authHmac/index.ts +2 -2
- package/src/middleware/authJwt/authJwt.test.ts +54 -54
- package/src/middleware/authJwt/authJwt.ts +55 -55
- package/src/middleware/authJwt/authJwt.types.ts +14 -14
- package/src/middleware/authJwt/index.ts +2 -2
- package/src/middleware/authStatic/authStatic.test.ts +36 -36
- package/src/middleware/authStatic/authStatic.ts +45 -45
- package/src/middleware/authStatic/index.ts +1 -1
- package/src/middleware/authTls/authTls.test.ts +138 -138
- package/src/middleware/authTls/authTls.ts +106 -106
- package/src/middleware/authTls/authTls.types.ts +13 -13
- package/src/middleware/authTls/index.ts +2 -2
- package/src/middleware/checkPermission/checkPermission.ts +32 -32
- package/src/middleware/error/error.test.ts +60 -60
- package/src/middleware/error/error.ts +25 -25
- package/src/middleware/error/index.ts +1 -1
- package/src/middleware/fileUploader/compressAvatar/compressAvatar.ts +25 -25
- package/src/middleware/fileUploader/compressAvatar/compressAvatar.types.ts +12 -12
- package/src/middleware/fileUploader/compressAvatar/index.ts +2 -2
- package/src/middleware/fileUploader/fileUploader.test.ts +310 -310
- package/src/middleware/fileUploader/fileUploader.ts +303 -303
- package/src/middleware/fileUploader/fileUploader.types.ts +52 -52
- package/src/middleware/fileUploader/index.ts +2 -2
- package/src/middleware/fileUploader/isMultiPart/index.ts +1 -1
- package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +9 -9
- package/src/middleware/fileUploader/validate/index.ts +1 -1
- package/src/middleware/fileUploader/validate/validate.ts +27 -27
- package/src/middleware/fourOhFour/fourOhFour.test.ts +14 -14
- package/src/middleware/fourOhFour/fourOhFour.ts +13 -13
- package/src/middleware/fourOhFour/index.ts +1 -1
- package/src/middleware/geminiFileUploader/geminiFileUploader.ts +117 -117
- package/src/middleware/geminiFileUploader/index.ts +1 -1
- package/src/middleware/healthCheck/healthCheck.test.ts +12 -12
- package/src/middleware/healthCheck/healthCheck.ts +14 -14
- package/src/middleware/healthCheck/index.ts +1 -1
- package/src/middleware/index.ts +17 -17
- package/src/middleware/metrics/index.ts +1 -1
- package/src/middleware/metrics/metrics.test.ts +46 -46
- package/src/middleware/metrics/metrics.ts +24 -24
- package/src/middleware/requestMetrics/index.ts +1 -1
- package/src/middleware/requestMetrics/requestMetrics.test.ts +77 -77
- package/src/middleware/requestMetrics/requestMetrics.ts +20 -20
- package/src/middleware/swaggerDocs/index.ts +2 -2
- package/src/middleware/swaggerDocs/swaggerDocs.ts +114 -114
- package/src/middleware/swaggerDocs/swaggerDocs.types.ts +41 -41
- package/src/middleware/userResolver/index.ts +1 -1
- package/src/middleware/userResolver/userResolver.test.ts +35 -35
- package/src/middleware/userResolver/userResolver.ts +35 -35
- package/src/middleware/validate/index.ts +1 -1
- package/src/middleware/validate/validate.test.ts +43 -43
- package/src/middleware/validate/validate.ts +25 -25
- package/src/middleware/version/index.ts +1 -1
- package/src/middleware/version/version.test.ts +23 -23
- package/src/middleware/version/version.ts +12 -12
- package/src/utils/checkEnvironment/index.ts +49 -49
- package/src/utils/createHttpServer/createHttpServer.test.ts +24 -24
- package/src/utils/createHttpServer/createHttpServer.ts +34 -34
- package/src/utils/createHttpServer/createHttpServer.validate.ts +17 -17
- package/src/utils/createHttpServer/index.ts +1 -1
- package/src/utils/createSortedObject/createSortedObject.ts +20 -20
- package/src/utils/createSortedObject/createSortedObjet.test.ts +47 -47
- package/src/utils/createSortedObject/index.ts +1 -1
- package/src/utils/dbMigration/dbMigration.test.ts +209 -209
- package/src/utils/dbMigration/dbMigration.ts +199 -199
- package/src/utils/dbMigration/dbMigration.types.ts +11 -11
- package/src/utils/dbMigration/index.ts +2 -2
- package/src/utils/dbMigration/migrateMetadataTable/index.ts +1 -1
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +59 -59
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +102 -102
- package/src/utils/envAssert/envAssert.ts +31 -31
- package/src/utils/envAssert/index.ts +1 -1
- package/src/utils/envAssert/validators/hostList.ts +17 -17
- package/src/utils/envAssert/validators/index.ts +5 -5
- package/src/utils/envAssert/validators/ipList.ts +13 -13
- package/src/utils/envAssert/validators/path.ts +13 -13
- package/src/utils/envAssert/validators/string.ts +9 -9
- package/src/utils/envAssert/validators/stringList.ts +13 -13
- package/src/utils/filter/filter.ts +17 -17
- package/src/utils/filter/index.ts +1 -1
- package/src/utils/getDynamicLink/getDynamicLink.test.ts +51 -51
- package/src/utils/getDynamicLink/getDynamicLink.ts +28 -28
- package/src/utils/getDynamicLink/getDynamicLink.types.ts +11 -11
- package/src/utils/getDynamicLink/getDynamicLink.validate.ts +6 -6
- package/src/utils/getDynamicLink/index.ts +2 -2
- package/src/utils/hmac/checkEnv/checkEnv.test.ts +18 -18
- package/src/utils/hmac/checkEnv/checkEnv.ts +9 -9
- package/src/utils/hmac/checkEnv/index.ts +1 -1
- package/src/utils/hmac/createHmac/createHmac.ts +33 -33
- package/src/utils/hmac/createHmac/index.ts +1 -1
- package/src/utils/hmac/index.ts +4 -4
- package/src/utils/hmac/index.types.ts +13 -13
- package/src/utils/hmac/signPayload/index.ts +1 -1
- package/src/utils/hmac/signPayload/signPayload.ts +16 -16
- package/src/utils/hmac/verifySignature/index.ts +1 -1
- package/src/utils/hmac/verifySignature/verifySignature.ts +24 -24
- package/src/utils/index.ts +26 -26
- package/src/utils/jwt/index.ts +2 -2
- package/src/utils/jwt/jwt.test.ts +41 -41
- package/src/utils/jwt/jwt.ts +204 -204
- package/src/utils/jwt/jwt.types.ts +21 -21
- package/src/utils/report/index.ts +3 -3
- package/src/utils/report/output.ts +45 -45
- package/src/utils/report/output.types.ts +70 -70
- package/src/utils/report/report.test.ts +133 -133
- package/src/utils/report/report.ts +134 -134
- package/src/utils/report/report.types.ts +13 -13
- package/src/utils/request/index.ts +1 -1
- package/src/utils/request/request.test.ts +26 -26
- package/src/utils/request/request.ts +48 -48
- package/src/utils/semverCompare/index.ts +1 -1
- package/src/utils/semverCompare/semverCompare.test.ts +49 -49
- package/src/utils/semverCompare/semverCompare.ts +60 -60
- package/src/utils/sendEmail/index.ts +1 -1
- package/src/utils/sendEmail/sendEmail.ts +27 -27
- package/src/utils/sendEmail/sendEmail.types.ts +7 -7
- package/src/utils/sendPush/index.ts +2 -2
- package/src/utils/sendPush/sendPush.ts +20 -20
- package/src/utils/sendPush/sendPush.types.ts +25 -25
- package/src/utils/tlsConfig/index.ts +2 -2
- package/src/utils/tlsConfig/tlsConfig.test.ts +32 -32
- package/src/utils/tlsConfig/tlsConfig.ts +47 -47
- package/src/utils/tlsConfig/tlsConfig.types.ts +11 -11
- package/src/utils/tlsConfig/tlsConfig.validate.ts +25 -25
- package/src/utils/tlsRequest/index.ts +1 -1
- package/src/utils/tlsRequest/tlsRequest.test.ts +63 -63
- package/src/utils/tlsRequest/tlsRequest.ts +12 -12
- package/src/utils/trimPathSlash/index.ts +1 -1
- package/src/utils/trimPathSlash/trimPathSlash.test.ts +26 -26
- package/src/utils/trimPathSlash/trimPathSlash.ts +8 -8
- package/test/env.ts +56 -56
- package/test/factory/index.ts +8 -8
- package/test/factory/sequelizeMeta.ts +12 -12
- package/test/hooks.ts +37 -37
- package/test/index.ts +3 -3
- package/test/stub/index.ts +3 -3
- package/test/stub/stubLocales.ts +68 -68
- package/test/stub/stubPubSub.ts +7 -7
- package/test/stub/stubStorage.ts +77 -77
- package/test/stub/stubStorage.types.ts +11 -11
- package/test/utils/app.ts +31 -31
- package/test/utils/index.ts +1 -1
- package/tsconfig.build.json +5 -5
- package/tsconfig.json +32 -32
|
@@ -1,199 +1,199 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
2
|
-
// Register ts-node at the top of runMigrations.ts
|
|
3
|
-
require('ts-node/register');
|
|
4
|
-
|
|
5
|
-
import { existsSync, lstatSync } from 'fs';
|
|
6
|
-
import { join } from 'path';
|
|
7
|
-
import { Sequelize, Transaction } from 'sequelize';
|
|
8
|
-
import { Umzug, SequelizeStorage } from 'umzug';
|
|
9
|
-
import { ClearDbOptions, RecreateDbOptions } from './dbMigration.types';
|
|
10
|
-
import { migrateMetadataTable } from './migrateMetadataTable';
|
|
11
|
-
import { SequelizeMeta } from 'db/models';
|
|
12
|
-
import { EngineError } from 'entities/EngineError';
|
|
13
|
-
import { sequelize } from 'entities/Sequelize';
|
|
14
|
-
import { reportDebug } from 'utils/report';
|
|
15
|
-
import { semverCompare } from 'utils/semverCompare';
|
|
16
|
-
|
|
17
|
-
const namespace = 'engine:utils:dbMigration';
|
|
18
|
-
|
|
19
|
-
function getMigrationPaths(): Array<string> | undefined {
|
|
20
|
-
// We look between possibilities for the first directory that exists and matches our expectations
|
|
21
|
-
// First a user specified one, then the production default, then the development default
|
|
22
|
-
const prodDefaultPath = join(process.cwd(), './dist/db/migrations');
|
|
23
|
-
const devDefaultPath = join(process.cwd(), './src/db/migrations');
|
|
24
|
-
const path = [
|
|
25
|
-
process.env.DB_MIGRATIONS_DIR,
|
|
26
|
-
process.env.NODE_ENV === 'prod' ? prodDefaultPath : devDefaultPath
|
|
27
|
-
].filter((path) => path && existsSync(path) && lstatSync(path).isDirectory());
|
|
28
|
-
reportDebug({
|
|
29
|
-
namespace,
|
|
30
|
-
message: 'Obtaining Umzug migration options',
|
|
31
|
-
data: {
|
|
32
|
-
path,
|
|
33
|
-
prodPath: prodDefaultPath,
|
|
34
|
-
devPath: devDefaultPath,
|
|
35
|
-
customPath: process.env.DB_MIGRATIONS_DIR
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
return path.map((p) =>
|
|
39
|
-
process.env.NODE_ENV === 'prod' ? `${p}/*.js` : `${p}/*.ts`
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** Run all the non-executed migrations one by one */
|
|
44
|
-
export async function runPendingMigrations(): Promise<void> {
|
|
45
|
-
if (!sequelize)
|
|
46
|
-
throw new EngineError({ message: 'Sequelize is not initialized' });
|
|
47
|
-
// First make sure that the metadata table is up to date
|
|
48
|
-
await migrateMetadataTable(sequelize);
|
|
49
|
-
const migrationPaths = getMigrationPaths();
|
|
50
|
-
|
|
51
|
-
if (!migrationPaths || migrationPaths.length <= 0) {
|
|
52
|
-
reportDebug({
|
|
53
|
-
namespace,
|
|
54
|
-
message: 'No valid migration paths found.',
|
|
55
|
-
data: { migrationPaths }
|
|
56
|
-
});
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
migrationPaths?.forEach(async (path) => {
|
|
61
|
-
const migrator = new Umzug({
|
|
62
|
-
migrations: {
|
|
63
|
-
glob: path,
|
|
64
|
-
resolve: ({ name, path, context }) => {
|
|
65
|
-
// Use require to import the migration file
|
|
66
|
-
const migration = require(path || '');
|
|
67
|
-
return {
|
|
68
|
-
name,
|
|
69
|
-
up: async () => migration.up(context),
|
|
70
|
-
down: async () => migration.down(context)
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
context: sequelize.getQueryInterface(),
|
|
75
|
-
storage: new SequelizeStorage({ sequelize }),
|
|
76
|
-
logger: console
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
reportDebug({
|
|
80
|
-
namespace,
|
|
81
|
-
message: 'Starting pending database migrations',
|
|
82
|
-
data: { path }
|
|
83
|
-
});
|
|
84
|
-
await migrator.up();
|
|
85
|
-
console.log('Db Migration Completed');
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/** Rollback all migrations up to a specified target version */
|
|
90
|
-
export async function rollbackMigrations(): Promise<void> {
|
|
91
|
-
if (!sequelize)
|
|
92
|
-
throw new EngineError({ message: 'Sequelize is not initialized' });
|
|
93
|
-
if (!process.env.BUILD_ID)
|
|
94
|
-
throw new EngineError({ message: 'BUILD_ID is not defined' });
|
|
95
|
-
|
|
96
|
-
// Fetch executed migrations in ascending order
|
|
97
|
-
const migrations = await SequelizeMeta.findAll({
|
|
98
|
-
order: [['name', 'ASC']],
|
|
99
|
-
raw: true
|
|
100
|
-
});
|
|
101
|
-
const rollbackUntil = migrations.find(
|
|
102
|
-
(migration) =>
|
|
103
|
-
migration.version &&
|
|
104
|
-
semverCompare(migration.version, process.env.BUILD_ID as string) === 1
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
if (!rollbackUntil) {
|
|
108
|
-
reportDebug({
|
|
109
|
-
namespace,
|
|
110
|
-
message: 'No rollback target found for the current BUILD_ID.',
|
|
111
|
-
data: { buildId: process.env.BUILD_ID }
|
|
112
|
-
});
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const migrationPaths = getMigrationPaths();
|
|
117
|
-
|
|
118
|
-
if (!migrationPaths || migrationPaths.length <= 0) {
|
|
119
|
-
reportDebug({
|
|
120
|
-
namespace,
|
|
121
|
-
message: 'No valid migration paths found for rollback.',
|
|
122
|
-
data: { migrationPaths }
|
|
123
|
-
});
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
migrationPaths.forEach(async (path) => {
|
|
128
|
-
const migrator = new Umzug({
|
|
129
|
-
migrations: {
|
|
130
|
-
glob: path,
|
|
131
|
-
resolve: ({ name, path, context }) => {
|
|
132
|
-
const migration = require(path || '');
|
|
133
|
-
return {
|
|
134
|
-
name,
|
|
135
|
-
up: async () => migration.up(context),
|
|
136
|
-
down: async () => migration.down(context)
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
},
|
|
140
|
-
context: sequelize.getQueryInterface(),
|
|
141
|
-
storage: new SequelizeStorage({ sequelize }),
|
|
142
|
-
logger: console
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
reportDebug({
|
|
146
|
-
namespace,
|
|
147
|
-
message: `Rolling back migrations up to: ${rollbackUntil.name}`,
|
|
148
|
-
data: { path }
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
await migrator.down({ to: rollbackUntil.name });
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Recreate the whole database
|
|
157
|
-
* Quick way to make sure that we are working on a clean database
|
|
158
|
-
* /!\ Should only be used when running tests
|
|
159
|
-
*/
|
|
160
|
-
export async function testRecreateDB(
|
|
161
|
-
options: RecreateDbOptions = {}
|
|
162
|
-
): Promise<void> {
|
|
163
|
-
if (!sequelize)
|
|
164
|
-
throw new EngineError({ message: 'Sequelize is not initialized' });
|
|
165
|
-
await sequelize.query(
|
|
166
|
-
`DROP SCHEMA public${process.env.SQL_TYPE === 'postgres' ? ' CASCADE' : ''}`
|
|
167
|
-
);
|
|
168
|
-
await sequelize.query(`CREATE SCHEMA public`);
|
|
169
|
-
if (!options.clean) await runPendingMigrations();
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Empty all the schemas in the database
|
|
174
|
-
* Quick way to flush the database data while keep the structure
|
|
175
|
-
* /!\ Should only be used when running tests
|
|
176
|
-
*/
|
|
177
|
-
export async function testClearDB(options: ClearDbOptions = {}): Promise<void> {
|
|
178
|
-
if (!sequelize)
|
|
179
|
-
throw new EngineError({ message: 'Sequelize is not initialized' });
|
|
180
|
-
await sequelize.transaction(clearDbTransaction(sequelize, options));
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/** DB clearing transaction */
|
|
184
|
-
function clearDbTransaction(sequelize: Sequelize, options: ClearDbOptions) {
|
|
185
|
-
return async (t: Transaction): Promise<void> => {
|
|
186
|
-
for (const model of Object.keys(sequelize.models)) {
|
|
187
|
-
// We ignore the migration metadata schema
|
|
188
|
-
if (!options.includeMetadata && model === 'sequelizeMeta') continue;
|
|
189
|
-
const table = sequelize.models[model].tableName;
|
|
190
|
-
await sequelize.query(
|
|
191
|
-
`TRUNCATE ${table}${process.env.SQL_TYPE === 'postgres' ? ' CASCADE' : ''};`,
|
|
192
|
-
{
|
|
193
|
-
raw: true,
|
|
194
|
-
transaction: t
|
|
195
|
-
}
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
};
|
|
199
|
-
}
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
2
|
+
// Register ts-node at the top of runMigrations.ts
|
|
3
|
+
require('ts-node/register');
|
|
4
|
+
|
|
5
|
+
import { existsSync, lstatSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { Sequelize, Transaction } from 'sequelize';
|
|
8
|
+
import { Umzug, SequelizeStorage } from 'umzug';
|
|
9
|
+
import { ClearDbOptions, RecreateDbOptions } from './dbMigration.types';
|
|
10
|
+
import { migrateMetadataTable } from './migrateMetadataTable';
|
|
11
|
+
import { SequelizeMeta } from 'db/models';
|
|
12
|
+
import { EngineError } from 'entities/EngineError';
|
|
13
|
+
import { sequelize } from 'entities/Sequelize';
|
|
14
|
+
import { reportDebug } from 'utils/report';
|
|
15
|
+
import { semverCompare } from 'utils/semverCompare';
|
|
16
|
+
|
|
17
|
+
const namespace = 'engine:utils:dbMigration';
|
|
18
|
+
|
|
19
|
+
function getMigrationPaths(): Array<string> | undefined {
|
|
20
|
+
// We look between possibilities for the first directory that exists and matches our expectations
|
|
21
|
+
// First a user specified one, then the production default, then the development default
|
|
22
|
+
const prodDefaultPath = join(process.cwd(), './dist/db/migrations');
|
|
23
|
+
const devDefaultPath = join(process.cwd(), './src/db/migrations');
|
|
24
|
+
const path = [
|
|
25
|
+
process.env.DB_MIGRATIONS_DIR,
|
|
26
|
+
process.env.NODE_ENV === 'prod' ? prodDefaultPath : devDefaultPath
|
|
27
|
+
].filter((path) => path && existsSync(path) && lstatSync(path).isDirectory());
|
|
28
|
+
reportDebug({
|
|
29
|
+
namespace,
|
|
30
|
+
message: 'Obtaining Umzug migration options',
|
|
31
|
+
data: {
|
|
32
|
+
path,
|
|
33
|
+
prodPath: prodDefaultPath,
|
|
34
|
+
devPath: devDefaultPath,
|
|
35
|
+
customPath: process.env.DB_MIGRATIONS_DIR
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return path.map((p) =>
|
|
39
|
+
process.env.NODE_ENV === 'prod' ? `${p}/*.js` : `${p}/*.ts`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Run all the non-executed migrations one by one */
|
|
44
|
+
export async function runPendingMigrations(): Promise<void> {
|
|
45
|
+
if (!sequelize)
|
|
46
|
+
throw new EngineError({ message: 'Sequelize is not initialized' });
|
|
47
|
+
// First make sure that the metadata table is up to date
|
|
48
|
+
await migrateMetadataTable(sequelize);
|
|
49
|
+
const migrationPaths = getMigrationPaths();
|
|
50
|
+
|
|
51
|
+
if (!migrationPaths || migrationPaths.length <= 0) {
|
|
52
|
+
reportDebug({
|
|
53
|
+
namespace,
|
|
54
|
+
message: 'No valid migration paths found.',
|
|
55
|
+
data: { migrationPaths }
|
|
56
|
+
});
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
migrationPaths?.forEach(async (path) => {
|
|
61
|
+
const migrator = new Umzug({
|
|
62
|
+
migrations: {
|
|
63
|
+
glob: path,
|
|
64
|
+
resolve: ({ name, path, context }) => {
|
|
65
|
+
// Use require to import the migration file
|
|
66
|
+
const migration = require(path || '');
|
|
67
|
+
return {
|
|
68
|
+
name,
|
|
69
|
+
up: async () => migration.up(context),
|
|
70
|
+
down: async () => migration.down(context)
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
context: sequelize.getQueryInterface(),
|
|
75
|
+
storage: new SequelizeStorage({ sequelize }),
|
|
76
|
+
logger: console
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
reportDebug({
|
|
80
|
+
namespace,
|
|
81
|
+
message: 'Starting pending database migrations',
|
|
82
|
+
data: { path }
|
|
83
|
+
});
|
|
84
|
+
await migrator.up();
|
|
85
|
+
console.log('Db Migration Completed');
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Rollback all migrations up to a specified target version */
|
|
90
|
+
export async function rollbackMigrations(): Promise<void> {
|
|
91
|
+
if (!sequelize)
|
|
92
|
+
throw new EngineError({ message: 'Sequelize is not initialized' });
|
|
93
|
+
if (!process.env.BUILD_ID)
|
|
94
|
+
throw new EngineError({ message: 'BUILD_ID is not defined' });
|
|
95
|
+
|
|
96
|
+
// Fetch executed migrations in ascending order
|
|
97
|
+
const migrations = await SequelizeMeta.findAll({
|
|
98
|
+
order: [['name', 'ASC']],
|
|
99
|
+
raw: true
|
|
100
|
+
});
|
|
101
|
+
const rollbackUntil = migrations.find(
|
|
102
|
+
(migration) =>
|
|
103
|
+
migration.version &&
|
|
104
|
+
semverCompare(migration.version, process.env.BUILD_ID as string) === 1
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
if (!rollbackUntil) {
|
|
108
|
+
reportDebug({
|
|
109
|
+
namespace,
|
|
110
|
+
message: 'No rollback target found for the current BUILD_ID.',
|
|
111
|
+
data: { buildId: process.env.BUILD_ID }
|
|
112
|
+
});
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const migrationPaths = getMigrationPaths();
|
|
117
|
+
|
|
118
|
+
if (!migrationPaths || migrationPaths.length <= 0) {
|
|
119
|
+
reportDebug({
|
|
120
|
+
namespace,
|
|
121
|
+
message: 'No valid migration paths found for rollback.',
|
|
122
|
+
data: { migrationPaths }
|
|
123
|
+
});
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
migrationPaths.forEach(async (path) => {
|
|
128
|
+
const migrator = new Umzug({
|
|
129
|
+
migrations: {
|
|
130
|
+
glob: path,
|
|
131
|
+
resolve: ({ name, path, context }) => {
|
|
132
|
+
const migration = require(path || '');
|
|
133
|
+
return {
|
|
134
|
+
name,
|
|
135
|
+
up: async () => migration.up(context),
|
|
136
|
+
down: async () => migration.down(context)
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
context: sequelize.getQueryInterface(),
|
|
141
|
+
storage: new SequelizeStorage({ sequelize }),
|
|
142
|
+
logger: console
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
reportDebug({
|
|
146
|
+
namespace,
|
|
147
|
+
message: `Rolling back migrations up to: ${rollbackUntil.name}`,
|
|
148
|
+
data: { path }
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
await migrator.down({ to: rollbackUntil.name });
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Recreate the whole database
|
|
157
|
+
* Quick way to make sure that we are working on a clean database
|
|
158
|
+
* /!\ Should only be used when running tests
|
|
159
|
+
*/
|
|
160
|
+
export async function testRecreateDB(
|
|
161
|
+
options: RecreateDbOptions = {}
|
|
162
|
+
): Promise<void> {
|
|
163
|
+
if (!sequelize)
|
|
164
|
+
throw new EngineError({ message: 'Sequelize is not initialized' });
|
|
165
|
+
await sequelize.query(
|
|
166
|
+
`DROP SCHEMA public${process.env.SQL_TYPE === 'postgres' ? ' CASCADE' : ''}`
|
|
167
|
+
);
|
|
168
|
+
await sequelize.query(`CREATE SCHEMA public`);
|
|
169
|
+
if (!options.clean) await runPendingMigrations();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Empty all the schemas in the database
|
|
174
|
+
* Quick way to flush the database data while keep the structure
|
|
175
|
+
* /!\ Should only be used when running tests
|
|
176
|
+
*/
|
|
177
|
+
export async function testClearDB(options: ClearDbOptions = {}): Promise<void> {
|
|
178
|
+
if (!sequelize)
|
|
179
|
+
throw new EngineError({ message: 'Sequelize is not initialized' });
|
|
180
|
+
await sequelize.transaction(clearDbTransaction(sequelize, options));
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** DB clearing transaction */
|
|
184
|
+
function clearDbTransaction(sequelize: Sequelize, options: ClearDbOptions) {
|
|
185
|
+
return async (t: Transaction): Promise<void> => {
|
|
186
|
+
for (const model of Object.keys(sequelize.models)) {
|
|
187
|
+
// We ignore the migration metadata schema
|
|
188
|
+
if (!options.includeMetadata && model === 'sequelizeMeta') continue;
|
|
189
|
+
const table = sequelize.models[model].tableName;
|
|
190
|
+
await sequelize.query(
|
|
191
|
+
`TRUNCATE ${table}${process.env.SQL_TYPE === 'postgres' ? ' CASCADE' : ''};`,
|
|
192
|
+
{
|
|
193
|
+
raw: true,
|
|
194
|
+
transaction: t
|
|
195
|
+
}
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/** Options to recreate the database */
|
|
2
|
-
export interface RecreateDbOptions {
|
|
3
|
-
/** Do not run the migrations, leave the DB empty */
|
|
4
|
-
clean?: boolean;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
/** Options to clear the database */
|
|
8
|
-
export interface ClearDbOptions {
|
|
9
|
-
/** Also truncate the migration metadata table. This should only be used when testing on the metadata table itself */
|
|
10
|
-
includeMetadata?: boolean;
|
|
11
|
-
}
|
|
1
|
+
/** Options to recreate the database */
|
|
2
|
+
export interface RecreateDbOptions {
|
|
3
|
+
/** Do not run the migrations, leave the DB empty */
|
|
4
|
+
clean?: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/** Options to clear the database */
|
|
8
|
+
export interface ClearDbOptions {
|
|
9
|
+
/** Also truncate the migration metadata table. This should only be used when testing on the metadata table itself */
|
|
10
|
+
includeMetadata?: boolean;
|
|
11
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './dbMigration';
|
|
2
|
-
export * from './dbMigration.types';
|
|
1
|
+
export * from './dbMigration';
|
|
2
|
+
export * from './dbMigration.types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './migrateMetadataTable';
|
|
1
|
+
export * from './migrateMetadataTable';
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
// import {expect} from 'chai';
|
|
2
|
-
// import { faker } from '@faker-js/faker';
|
|
3
|
-
// import {QueryTypes} from 'sequelize';
|
|
4
|
-
// import {testRecreateDB} from '../dbMigration';
|
|
5
|
-
// import {migrateMetadataTable} from './migrateMetadataTable';
|
|
6
|
-
// import {sequelize} from 'entities/Sequelize';
|
|
7
|
-
|
|
8
|
-
// describe('Utils - DB Migration - Migrate Metadata Table', function () {
|
|
9
|
-
// before(async () => {
|
|
10
|
-
// sequelize.init();
|
|
11
|
-
// await testRecreateDB({clean: true});
|
|
12
|
-
// });
|
|
13
|
-
|
|
14
|
-
// afterEach(async () => {
|
|
15
|
-
// await testRecreateDB({clean: true});
|
|
16
|
-
// });
|
|
17
|
-
|
|
18
|
-
// // it('should create the metadata table if it does not exist', async () => {
|
|
19
|
-
// // await migrateMetadataTable(sequelize);
|
|
20
|
-
|
|
21
|
-
// // const tables = await sequelize.query<[string]>(
|
|
22
|
-
// // "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'",
|
|
23
|
-
// // {type: QueryTypes.SELECT},
|
|
24
|
-
// // );
|
|
25
|
-
// // const hasTable = tables.some((table) => table[0] === 'sequelize_meta');
|
|
26
|
-
// // expect(hasTable).to.be.true;
|
|
27
|
-
// // });
|
|
28
|
-
|
|
29
|
-
// it('should copy legacy table data to the new table', async () => {
|
|
30
|
-
// await sequelize.query('CREATE TABLE SequelizeMeta (name varchar(100) PRIMARY KEY)', {
|
|
31
|
-
// type: QueryTypes.RAW,
|
|
32
|
-
// });
|
|
33
|
-
|
|
34
|
-
// const migrations = [faker.lorem.word(), faker.lorem.word(), faker.lorem.word()];
|
|
35
|
-
// await sequelize.query(
|
|
36
|
-
// `INSERT INTO "SequelizeMeta" ("name") VALUES ('${migrations[0]}'), ('${migrations[1]}'), ('${migrations[2]}')`,
|
|
37
|
-
// {
|
|
38
|
-
// type: QueryTypes.RAW,
|
|
39
|
-
// },
|
|
40
|
-
// );
|
|
41
|
-
|
|
42
|
-
// await migrateMetadataTable(sequelize);
|
|
43
|
-
|
|
44
|
-
// const results = await sequelize.query<{
|
|
45
|
-
// /** Name of the migration */
|
|
46
|
-
// name: string;
|
|
47
|
-
// /** Version at which the migration was executed */
|
|
48
|
-
// version: string;
|
|
49
|
-
// }>('SELECT * FROM sequelize_meta', {
|
|
50
|
-
// type: QueryTypes.SELECT,
|
|
51
|
-
// });
|
|
52
|
-
|
|
53
|
-
// expect(results).to.have.length(3);
|
|
54
|
-
// results.forEach((result) => {
|
|
55
|
-
// expect(migrations).to.include(result.name);
|
|
56
|
-
// expect(result.version).to.be.null;
|
|
57
|
-
// });
|
|
58
|
-
// });
|
|
59
|
-
// });
|
|
1
|
+
// import {expect} from 'chai';
|
|
2
|
+
// import { faker } from '@faker-js/faker';
|
|
3
|
+
// import {QueryTypes} from 'sequelize';
|
|
4
|
+
// import {testRecreateDB} from '../dbMigration';
|
|
5
|
+
// import {migrateMetadataTable} from './migrateMetadataTable';
|
|
6
|
+
// import {sequelize} from 'entities/Sequelize';
|
|
7
|
+
|
|
8
|
+
// describe('Utils - DB Migration - Migrate Metadata Table', function () {
|
|
9
|
+
// before(async () => {
|
|
10
|
+
// sequelize.init();
|
|
11
|
+
// await testRecreateDB({clean: true});
|
|
12
|
+
// });
|
|
13
|
+
|
|
14
|
+
// afterEach(async () => {
|
|
15
|
+
// await testRecreateDB({clean: true});
|
|
16
|
+
// });
|
|
17
|
+
|
|
18
|
+
// // it('should create the metadata table if it does not exist', async () => {
|
|
19
|
+
// // await migrateMetadataTable(sequelize);
|
|
20
|
+
|
|
21
|
+
// // const tables = await sequelize.query<[string]>(
|
|
22
|
+
// // "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'",
|
|
23
|
+
// // {type: QueryTypes.SELECT},
|
|
24
|
+
// // );
|
|
25
|
+
// // const hasTable = tables.some((table) => table[0] === 'sequelize_meta');
|
|
26
|
+
// // expect(hasTable).to.be.true;
|
|
27
|
+
// // });
|
|
28
|
+
|
|
29
|
+
// it('should copy legacy table data to the new table', async () => {
|
|
30
|
+
// await sequelize.query('CREATE TABLE SequelizeMeta (name varchar(100) PRIMARY KEY)', {
|
|
31
|
+
// type: QueryTypes.RAW,
|
|
32
|
+
// });
|
|
33
|
+
|
|
34
|
+
// const migrations = [faker.lorem.word(), faker.lorem.word(), faker.lorem.word()];
|
|
35
|
+
// await sequelize.query(
|
|
36
|
+
// `INSERT INTO "SequelizeMeta" ("name") VALUES ('${migrations[0]}'), ('${migrations[1]}'), ('${migrations[2]}')`,
|
|
37
|
+
// {
|
|
38
|
+
// type: QueryTypes.RAW,
|
|
39
|
+
// },
|
|
40
|
+
// );
|
|
41
|
+
|
|
42
|
+
// await migrateMetadataTable(sequelize);
|
|
43
|
+
|
|
44
|
+
// const results = await sequelize.query<{
|
|
45
|
+
// /** Name of the migration */
|
|
46
|
+
// name: string;
|
|
47
|
+
// /** Version at which the migration was executed */
|
|
48
|
+
// version: string;
|
|
49
|
+
// }>('SELECT * FROM sequelize_meta', {
|
|
50
|
+
// type: QueryTypes.SELECT,
|
|
51
|
+
// });
|
|
52
|
+
|
|
53
|
+
// expect(results).to.have.length(3);
|
|
54
|
+
// results.forEach((result) => {
|
|
55
|
+
// expect(migrations).to.include(result.name);
|
|
56
|
+
// expect(result.version).to.be.null;
|
|
57
|
+
// });
|
|
58
|
+
// });
|
|
59
|
+
// });
|