@rapidrest/service-core 1.0.0-rc.7 → 1.0.0
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/LICENSE +382 -23
- package/README.md +79 -5
- package/dist/lib/ApiErrors.js +10 -0
- package/dist/lib/ApiErrors.js.map +1 -1
- package/dist/lib/BackgroundService.js +1 -4
- package/dist/lib/BackgroundService.js.map +1 -1
- package/dist/lib/BackgroundServiceManager.js +47 -6
- package/dist/lib/BackgroundServiceManager.js.map +1 -1
- package/dist/lib/BulkError.js +4 -0
- package/dist/lib/BulkError.js.map +1 -1
- package/dist/lib/EventListenerManager.js +53 -18
- package/dist/lib/EventListenerManager.js.map +1 -1
- package/dist/lib/NetUtils.js +1 -0
- package/dist/lib/NetUtils.js.map +1 -1
- package/dist/lib/NotificationUtils.js +27 -8
- package/dist/lib/NotificationUtils.js.map +1 -1
- package/dist/lib/ObjectFactory.js +25 -44
- package/dist/lib/ObjectFactory.js.map +1 -1
- package/dist/lib/OpenApiSpec.js +31 -11
- package/dist/lib/OpenApiSpec.js.map +1 -1
- package/dist/lib/Server.js +74 -110
- package/dist/lib/Server.js.map +1 -1
- package/dist/lib/auth/AuthMiddleware.js +11 -16
- package/dist/lib/auth/AuthMiddleware.js.map +1 -1
- package/dist/lib/auth/JWTStrategy.js +68 -17
- package/dist/lib/auth/JWTStrategy.js.map +1 -1
- package/dist/lib/auth/index.js +0 -1
- package/dist/lib/auth/index.js.map +1 -1
- package/dist/lib/database/ConnectionKinds.js +15 -0
- package/dist/lib/database/ConnectionKinds.js.map +1 -1
- package/dist/lib/database/ConnectionManager.js +140 -61
- package/dist/lib/database/ConnectionManager.js.map +1 -1
- package/dist/lib/database/MongoConnection.js +13 -3
- package/dist/lib/database/MongoConnection.js.map +1 -1
- package/dist/lib/database/MongoRepository.js +61 -15
- package/dist/lib/database/MongoRepository.js.map +1 -1
- package/dist/lib/database/MongoSchemaSync.js +3 -3
- package/dist/lib/database/MongoSchemaSync.js.map +1 -1
- package/dist/lib/database/NamingUtils.js +3 -2
- package/dist/lib/database/NamingUtils.js.map +1 -1
- package/dist/lib/database/RedisCache.js +64 -0
- package/dist/lib/database/RedisCache.js.map +1 -0
- package/dist/lib/database/TypeOrmSupport.js +53 -13
- package/dist/lib/database/TypeOrmSupport.js.map +1 -1
- package/dist/lib/database/index.js +1 -0
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/decorators/DatabaseDecorators.js +264 -20
- package/dist/lib/decorators/DatabaseDecorators.js.map +1 -1
- package/dist/lib/decorators/DocDecorators.js +30 -9
- package/dist/lib/decorators/DocDecorators.js.map +1 -1
- package/dist/lib/decorators/EventDecorators.js +1 -0
- package/dist/lib/decorators/EventDecorators.js.map +1 -1
- package/dist/lib/decorators/ModelDecorators.js +39 -23
- package/dist/lib/decorators/ModelDecorators.js.map +1 -1
- package/dist/lib/decorators/PersistenceDecorators.js +4 -3
- package/dist/lib/decorators/PersistenceDecorators.js.map +1 -1
- package/dist/lib/decorators/RouteDecorators.js +139 -36
- package/dist/lib/decorators/RouteDecorators.js.map +1 -1
- package/dist/lib/http/IWebSocketShim.js +2 -0
- package/dist/lib/http/IWebSocketShim.js.map +1 -0
- package/dist/lib/http/MiddlewareChain.js +167 -0
- package/dist/lib/http/MiddlewareChain.js.map +1 -0
- package/dist/lib/http/RuntimeDetect.js +9 -0
- package/dist/lib/http/RuntimeDetect.js.map +1 -0
- package/dist/lib/http/bun/BunAdapters.js +326 -0
- package/dist/lib/http/bun/BunAdapters.js.map +1 -0
- package/dist/lib/http/bun/BunRouter.js +391 -0
- package/dist/lib/http/bun/BunRouter.js.map +1 -0
- package/dist/lib/http/bun/BunWebSocket.js +49 -0
- package/dist/lib/http/bun/BunWebSocket.js.map +1 -0
- package/dist/lib/http/index.js +16 -3
- package/dist/lib/http/index.js.map +1 -1
- package/dist/lib/http/session/RedisSessionStore.js +30 -0
- package/dist/lib/http/session/RedisSessionStore.js.map +1 -0
- package/dist/lib/http/session/SessionManager.js +113 -0
- package/dist/lib/http/session/SessionManager.js.map +1 -0
- package/dist/lib/http/session/SessionStore.js +6 -0
- package/dist/lib/http/session/SessionStore.js.map +1 -0
- package/dist/lib/http/session/sessionMiddleware.js +42 -0
- package/dist/lib/http/session/sessionMiddleware.js.map +1 -0
- package/dist/lib/http/types.js +0 -3
- package/dist/lib/http/types.js.map +1 -1
- package/dist/lib/http/uWS/Adapters.js +421 -0
- package/dist/lib/http/uWS/Adapters.js.map +1 -0
- package/dist/lib/http/{Router.js → uWS/Router.js} +73 -173
- package/dist/lib/http/uWS/Router.js.map +1 -0
- package/dist/lib/http/{WebSocket.js → uWS/WebSocket.js} +4 -1
- package/dist/lib/http/uWS/WebSocket.js.map +1 -0
- package/dist/lib/models/BaseEntity.js +2 -1
- package/dist/lib/models/BaseEntity.js.map +1 -1
- package/dist/lib/models/BaseMongoEntity.js +2 -2
- package/dist/lib/models/BaseMongoEntity.js.map +1 -1
- package/dist/lib/models/ModelUtils.js +248 -101
- package/dist/lib/models/ModelUtils.js.map +1 -1
- package/dist/lib/models/RecoverableBaseEntity.js +6 -1
- package/dist/lib/models/RecoverableBaseEntity.js.map +1 -1
- package/dist/lib/models/RecoverableBaseMongoEntity.js +1 -0
- package/dist/lib/models/RecoverableBaseMongoEntity.js.map +1 -1
- package/dist/lib/models/RepoUtils.js +641 -203
- package/dist/lib/models/RepoUtils.js.map +1 -1
- package/dist/lib/models/SimpleEntity.js +1 -0
- package/dist/lib/models/SimpleEntity.js.map +1 -1
- package/dist/lib/models/SimpleMongoEntity.js +2 -1
- package/dist/lib/models/SimpleMongoEntity.js.map +1 -1
- package/dist/lib/models/StatusExtraData.js +4 -0
- package/dist/lib/models/StatusExtraData.js.map +1 -1
- package/dist/lib/routes/{AdminRoute.js → BaseAdminRoute.js} +98 -80
- package/dist/lib/routes/BaseAdminRoute.js.map +1 -0
- package/dist/lib/routes/{MetricsRoute.js → BaseMetricsRoute.js} +29 -15
- package/dist/lib/routes/BaseMetricsRoute.js.map +1 -0
- package/dist/lib/routes/{OpenAPIRoute.js → BaseOpenAPIRoute.js} +32 -32
- package/dist/lib/routes/BaseOpenAPIRoute.js.map +1 -0
- package/dist/lib/routes/BasePushRoute.js +305 -0
- package/dist/lib/routes/BasePushRoute.js.map +1 -0
- package/dist/lib/routes/BaseStaticRoute.js +153 -0
- package/dist/lib/routes/BaseStaticRoute.js.map +1 -0
- package/dist/lib/routes/BaseStatusRoute.js +80 -0
- package/dist/lib/routes/BaseStatusRoute.js.map +1 -0
- package/dist/lib/routes/CRUDRoute.js +284 -0
- package/dist/lib/routes/CRUDRoute.js.map +1 -0
- package/dist/lib/routes/ModelRoute.js +84 -57
- package/dist/lib/routes/ModelRoute.js.map +1 -1
- package/dist/lib/routes/RouteUtils.js +108 -20
- package/dist/lib/routes/RouteUtils.js.map +1 -1
- package/dist/lib/routes/index.js +7 -4
- package/dist/lib/routes/index.js.map +1 -1
- package/dist/lib/security/ACLUtils.js +297 -170
- package/dist/lib/security/ACLUtils.js.map +1 -1
- package/dist/lib/security/AccessControlList.js +18 -10
- package/dist/lib/security/AccessControlList.js.map +1 -1
- package/dist/lib/security/AccessControlListMongo.js +19 -68
- package/dist/lib/security/AccessControlListMongo.js.map +1 -1
- package/dist/lib/security/AccessControlListSQL.js +21 -70
- package/dist/lib/security/AccessControlListSQL.js.map +1 -1
- package/dist/lib/security/BaseACLRoute.js +239 -0
- package/dist/lib/security/BaseACLRoute.js.map +1 -0
- package/dist/lib/security/index.js +3 -0
- package/dist/lib/security/index.js.map +1 -1
- package/dist/lib/test/request.js +62 -5
- package/dist/lib/test/request.js.map +1 -1
- package/dist/lib/test/requestws.js +34 -10
- package/dist/lib/test/requestws.js.map +1 -1
- package/dist/types/ApiErrors.d.ts +8 -2
- package/dist/types/BackgroundService.d.ts +0 -5
- package/dist/types/BackgroundServiceManager.d.ts +2 -1
- package/dist/types/EventListenerManager.d.ts +7 -6
- package/dist/types/NotificationUtils.d.ts +5 -3
- package/dist/types/OpenApiSpec.d.ts +2 -2
- package/dist/types/Server.d.ts +28 -10
- package/dist/types/auth/AuthMiddleware.d.ts +3 -3
- package/dist/types/auth/AuthStrategy.d.ts +10 -7
- package/dist/types/auth/JWTStrategy.d.ts +6 -4
- package/dist/types/auth/index.d.ts +0 -1
- package/dist/types/database/ConnectionKinds.d.ts +7 -0
- package/dist/types/database/ConnectionManager.d.ts +29 -4
- package/dist/types/database/MongoConnection.d.ts +16 -4
- package/dist/types/database/MongoRepository.d.ts +32 -11
- package/dist/types/database/RedisCache.d.ts +23 -0
- package/dist/types/database/TypeOrmSupport.d.ts +4 -4
- package/dist/types/database/index.d.ts +1 -0
- package/dist/types/decorators/DatabaseDecorators.d.ts +139 -8
- package/dist/types/decorators/DocDecorators.d.ts +11 -2
- package/dist/types/decorators/ModelDecorators.d.ts +12 -5
- package/dist/types/decorators/PersistenceDecorators.d.ts +11 -4
- package/dist/types/decorators/RouteDecorators.d.ts +36 -6
- package/dist/types/http/IWebSocketShim.d.ts +11 -0
- package/dist/types/http/MiddlewareChain.d.ts +47 -0
- package/dist/types/http/RuntimeDetect.d.ts +2 -0
- package/dist/types/http/bun/BunAdapters.d.ts +139 -0
- package/dist/types/http/bun/BunRouter.d.ts +79 -0
- package/dist/types/http/bun/BunWebSocket.d.ts +35 -0
- package/dist/types/http/index.d.ts +16 -6
- package/dist/types/http/session/RedisSessionStore.d.ts +15 -0
- package/dist/types/http/session/SessionManager.d.ts +35 -0
- package/dist/types/http/session/SessionStore.d.ts +12 -0
- package/dist/types/http/session/sessionMiddleware.d.ts +10 -0
- package/dist/types/http/types.d.ts +42 -3
- package/dist/types/http/uWS/Adapters.d.ts +129 -0
- package/dist/types/http/{Router.d.ts → uWS/Router.d.ts} +14 -38
- package/dist/types/http/{WebSocket.d.ts → uWS/WebSocket.d.ts} +6 -5
- package/dist/types/models/BaseEntity.d.ts +1 -1
- package/dist/types/models/ModelUtils.d.ts +47 -14
- package/dist/types/models/RecoverableBaseEntity.d.ts +3 -1
- package/dist/types/models/RepoUtils.d.ts +84 -14
- package/dist/types/routes/BaseAdminRoute.d.ts +65 -0
- package/dist/types/routes/BaseMetricsRoute.d.ts +37 -0
- package/dist/types/routes/BaseOpenAPIRoute.d.ts +33 -0
- package/dist/types/routes/BasePushRoute.d.ts +53 -0
- package/dist/types/routes/BaseStaticRoute.d.ts +44 -0
- package/dist/types/routes/BaseStatusRoute.d.ts +37 -0
- package/dist/types/routes/CRUDRoute.d.ts +57 -0
- package/dist/types/routes/ModelRoute.d.ts +39 -36
- package/dist/types/routes/RouteUtils.d.ts +19 -0
- package/dist/types/routes/index.d.ts +7 -4
- package/dist/types/security/ACLUtils.d.ts +94 -18
- package/dist/types/security/AccessControlList.d.ts +37 -59
- package/dist/types/security/AccessControlListMongo.d.ts +3 -8
- package/dist/types/security/AccessControlListSQL.d.ts +3 -8
- package/dist/types/security/BaseACLRoute.d.ts +73 -0
- package/dist/types/security/index.d.ts +3 -0
- package/dist/types/test/request.d.ts +18 -1
- package/package.json +135 -129
- package/tsconfig.export.json +17 -0
- package/dist/lib/auth/BasicStrategy.js +0 -113
- package/dist/lib/auth/BasicStrategy.js.map +0 -1
- package/dist/lib/http/Adapters.js +0 -241
- package/dist/lib/http/Adapters.js.map +0 -1
- package/dist/lib/http/Router.js.map +0 -1
- package/dist/lib/http/WebSocket.js.map +0 -1
- package/dist/lib/routes/AdminRoute.js.map +0 -1
- package/dist/lib/routes/MetricsRoute.js.map +0 -1
- package/dist/lib/routes/OpenAPIRoute.js.map +0 -1
- package/dist/lib/routes/StatusRoute.js +0 -55
- package/dist/lib/routes/StatusRoute.js.map +0 -1
- package/dist/lib/security/ACLRouteMongo.js +0 -194
- package/dist/lib/security/ACLRouteMongo.js.map +0 -1
- package/dist/lib/security/ACLRouteSQL.js +0 -193
- package/dist/lib/security/ACLRouteSQL.js.map +0 -1
- package/dist/types/auth/BasicStrategy.d.ts +0 -37
- package/dist/types/http/Adapters.d.ts +0 -68
- package/dist/types/routes/AdminRoute.d.ts +0 -47
- package/dist/types/routes/MetricsRoute.d.ts +0 -15
- package/dist/types/routes/OpenAPIRoute.d.ts +0 -17
- package/dist/types/routes/StatusRoute.d.ts +0 -11
- package/dist/types/security/ACLRouteMongo.d.ts +0 -19
- package/dist/types/security/ACLRouteSQL.d.ts +0 -19
- package/docs/Makefile +0 -20
- package/docs/conf.py +0 -58
- package/docs/index.rst +0 -17
- package/docs/make.bat +0 -35
- package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/README.md +0 -13
- package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/MongoRepository.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/RedisConnection.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/Repository.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/README.md +0 -23
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Default.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Description.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Document.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Example.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Format.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Returns.md +0 -28
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Summary.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Tags.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/TypeInfo.md +0 -28
- package/docs/reference/@rapidrest/namespaces/DocDecorators/interfaces/DocumentsData.md +0 -57
- package/docs/reference/@rapidrest/namespaces/EventDecorators/README.md +0 -12
- package/docs/reference/@rapidrest/namespaces/EventDecorators/functions/EventListener.md +0 -17
- package/docs/reference/@rapidrest/namespaces/EventDecorators/functions/OnEvent.md +0 -26
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/README.md +0 -26
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Cache.md +0 -25
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/ChildEntity.md +0 -18
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/DataStore.md +0 -25
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Identifier.md +0 -27
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Protect.md +0 -35
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Reference.md +0 -25
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Shard.md +0 -27
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/TrackChanges.md +0 -26
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/interfaces/PendingTypeOrmColumn.md +0 -45
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/variables/pendingTypeOrmColumns.md +0 -14
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/README.md +0 -27
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Column.md +0 -25
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Entity.md +0 -25
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Index.md +0 -119
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/PrimaryColumn.md +0 -25
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Unique.md +0 -68
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getColumnMetadata.md +0 -26
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getEntityName.md +0 -26
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getIndexMetadata.md +0 -27
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/CollationOptions.md +0 -79
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/ColumnInfo.md +0 -41
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/ColumnOptions.md +0 -51
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/EntityOptions.md +0 -32
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/IndexInfo.md +0 -41
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/IndexOptions.md +0 -61
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/README.md +0 -36
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/After.md +0 -26
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Auth.md +0 -33
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/AuthResult.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Before.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/ContentType.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Delete.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Get.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Head.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Header.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Method.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Model.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Options.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Param.md +0 -26
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Patch.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Post.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Protect.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Put.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Query.md +0 -26
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Request.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/RequiresRole.md +0 -26
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Response.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Route.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Socket.md +0 -33
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/User.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Validate.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/WebSocket.md +0 -25
- package/docs/reference/README.md +0 -20
- package/docs/reference/classes/ACLUtils.md +0 -263
- package/docs/reference/classes/AdminRoute.md +0 -51
- package/docs/reference/classes/AuthMiddleware.md +0 -173
- package/docs/reference/classes/BackgroundService.md +0 -117
- package/docs/reference/classes/BackgroundServiceManager.md +0 -172
- package/docs/reference/classes/BaseEntity.md +0 -82
- package/docs/reference/classes/BaseMongoEntity.md +0 -107
- package/docs/reference/classes/BasicStrategy.md +0 -131
- package/docs/reference/classes/BasicStrategyOptions.md +0 -115
- package/docs/reference/classes/BulkError.md +0 -271
- package/docs/reference/classes/ConnectionManager.md +0 -75
- package/docs/reference/classes/EventListenerManager.md +0 -88
- package/docs/reference/classes/HttpRouter.md +0 -343
- package/docs/reference/classes/JWTStrategy.md +0 -100
- package/docs/reference/classes/JWTStrategyOptions.md +0 -97
- package/docs/reference/classes/MetricsRoute.md +0 -27
- package/docs/reference/classes/ModelRoute.md +0 -527
- package/docs/reference/classes/ModelUtils.md +0 -446
- package/docs/reference/classes/MongoConnection.md +0 -218
- package/docs/reference/classes/MongoRepository.md +0 -390
- package/docs/reference/classes/MongoSchemaSync.md +0 -97
- package/docs/reference/classes/NetUtils.md +0 -90
- package/docs/reference/classes/NotificationUtils.md +0 -77
- package/docs/reference/classes/ObjectFactory.md +0 -336
- package/docs/reference/classes/OpenAPIRoute.md +0 -77
- package/docs/reference/classes/OpenApiSpec.md +0 -892
- package/docs/reference/classes/RecoverableBaseEntity.md +0 -114
- package/docs/reference/classes/RecoverableBaseMongoEntity.md +0 -124
- package/docs/reference/classes/RedisTransport.md +0 -2202
- package/docs/reference/classes/RepoUtils.md +0 -482
- package/docs/reference/classes/RouteUtils.md +0 -191
- package/docs/reference/classes/Server.md +0 -408
- package/docs/reference/classes/SimpleEntity.md +0 -48
- package/docs/reference/classes/SimpleMongoEntity.md +0 -66
- package/docs/reference/classes/StatusExtraData.md +0 -57
- package/docs/reference/classes/StatusRoute.md +0 -26
- package/docs/reference/classes/UWSRequest.md +0 -226
- package/docs/reference/classes/UWSResponse.md +0 -257
- package/docs/reference/classes/UWSWebSocketShim.md +0 -958
- package/docs/reference/enumerations/ACLAction.md +0 -63
- package/docs/reference/enumerations/ApiErrorMessages.md +0 -123
- package/docs/reference/enumerations/ApiErrors.md +0 -123
- package/docs/reference/functions/createWebSocketStream.md +0 -27
- package/docs/reference/functions/isSqlDataSource.md +0 -26
- package/docs/reference/functions/readBody.md +0 -29
- package/docs/reference/functions/resolveCollectionName.md +0 -33
- package/docs/reference/functions/runChain.md +0 -40
- package/docs/reference/functions/snakeCase.md +0 -28
- package/docs/reference/globals.md +0 -106
- package/docs/reference/interfaces/ACLRecord.md +0 -96
- package/docs/reference/interfaces/AccessControlList.md +0 -76
- package/docs/reference/interfaces/AuthResult.md +0 -55
- package/docs/reference/interfaces/AuthStrategy.md +0 -95
- package/docs/reference/interfaces/CreateRequestOptions.md +0 -121
- package/docs/reference/interfaces/DeleteRequestOptions.md +0 -137
- package/docs/reference/interfaces/FindRequestOptions.md +0 -133
- package/docs/reference/interfaces/HttpRequest.md +0 -147
- package/docs/reference/interfaces/HttpResponse.md +0 -164
- package/docs/reference/interfaces/JWTAuthResult.md +0 -84
- package/docs/reference/interfaces/RepoCreateOptions.md +0 -95
- package/docs/reference/interfaces/RepoDeleteOptions.md +0 -105
- package/docs/reference/interfaces/RepoFindOptions.md +0 -125
- package/docs/reference/interfaces/RepoOperationOptions.md +0 -69
- package/docs/reference/interfaces/RepoUpdateOptions.md +0 -101
- package/docs/reference/interfaces/RequestOptions.md +0 -112
- package/docs/reference/interfaces/RequestWS.md +0 -225
- package/docs/reference/interfaces/TruncateRequestOptions.md +0 -161
- package/docs/reference/interfaces/UpdateRequestOptions.md +0 -139
- package/docs/reference/type-aliases/ErrorHandler.md +0 -35
- package/docs/reference/type-aliases/NextFunction.md +0 -23
- package/docs/reference/type-aliases/OneOrMany.md +0 -19
- package/docs/reference/type-aliases/OneOrNull.md +0 -19
- package/docs/reference/type-aliases/PartialBaseEntity.md +0 -17
- package/docs/reference/type-aliases/PartialSimpleEntity.md +0 -17
- package/docs/reference/type-aliases/RequestHandler.md +0 -31
- package/docs/reference/type-aliases/UpdateObject.md +0 -19
- package/docs/reference/type-aliases/WsUpgradeAuth.md +0 -27
- package/docs/reference/type-aliases/WsUpgradeAuthResult.md +0 -47
|
@@ -22,15 +22,15 @@ export class MongoRepository {
|
|
|
22
22
|
*
|
|
23
23
|
* @param pipeline The aggregation pipeline stages to execute.
|
|
24
24
|
*/
|
|
25
|
-
aggregate(pipeline) {
|
|
26
|
-
return this.collection.aggregate(pipeline);
|
|
25
|
+
aggregate(pipeline, options) {
|
|
26
|
+
return this.collection.aggregate(pipeline, options);
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Drops the entire collection from the database, removing all documents and indexes. Does nothing if the
|
|
30
30
|
* collection does not exist.
|
|
31
31
|
*/
|
|
32
|
-
async clear() {
|
|
33
|
-
await this.collection.deleteMany({});
|
|
32
|
+
async clear(options) {
|
|
33
|
+
await this.collection.deleteMany({}, options);
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* Returns the number of documents matching the given filter.
|
|
@@ -59,14 +59,31 @@ export class MongoRepository {
|
|
|
59
59
|
deleteOne(filter, options) {
|
|
60
60
|
return this.collection.deleteOne(filter, options);
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Atomically finds and deletes the first document matching the given filter, returning the document that
|
|
64
|
+
* was deleted (or `null` if none matched). This is a single round trip rather than a separate `findOne()` +
|
|
65
|
+
* `deleteOne()`, so a caller that needs to know exactly what it removed (e.g. to snapshot it for a
|
|
66
|
+
* possible restore) isn't racing its own read against a concurrent write to the same document.
|
|
67
|
+
*
|
|
68
|
+
* @param filter The query filter to match documents against.
|
|
69
|
+
* @param options - Optional settings for the command
|
|
70
|
+
*/
|
|
71
|
+
findOneAndDelete(filter, options) {
|
|
72
|
+
return this.collection.findOneAndDelete(filter, options ?? {});
|
|
73
|
+
}
|
|
62
74
|
/**
|
|
63
75
|
* Returns the list of distinct values of the given field for all documents matching the given filter.
|
|
64
76
|
*
|
|
65
77
|
* @param field The name of the document field to return distinct values of.
|
|
66
78
|
* @param filter The query filter to match documents against.
|
|
67
79
|
*/
|
|
68
|
-
distinct(field, filter) {
|
|
69
|
-
|
|
80
|
+
distinct(field, filter, options) {
|
|
81
|
+
if (options) {
|
|
82
|
+
return this.collection.distinct(field, filter ?? {}, options);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
return this.collection.distinct(field, filter ?? {});
|
|
86
|
+
}
|
|
70
87
|
}
|
|
71
88
|
/**
|
|
72
89
|
* Returns all documents matching the given filter.
|
|
@@ -82,18 +99,28 @@ export class MongoRepository {
|
|
|
82
99
|
*
|
|
83
100
|
* @param filter The query filter to match documents against.
|
|
84
101
|
*/
|
|
85
|
-
findOne(filter) {
|
|
86
|
-
return this.collection.findOne(filter);
|
|
102
|
+
findOne(filter, options) {
|
|
103
|
+
return this.collection.findOne(filter, options);
|
|
87
104
|
}
|
|
88
105
|
/**
|
|
89
|
-
* Saves the given document to the collection.
|
|
90
|
-
* replaced (inserting if missing), otherwise the document is inserted and its newly assigned
|
|
91
|
-
* the returned object.
|
|
106
|
+
* Saves the given document to the collection. By default, if the document has an existing `_id` the stored
|
|
107
|
+
* document is replaced (inserting if missing), otherwise the document is inserted and its newly assigned
|
|
108
|
+
* `_id` is set on the returned object. This is the behavior a trackChanges-style caller relies on to keep
|
|
109
|
+
* multiple documents per `uid` (one per version): a document built for a fresh version deliberately carries
|
|
110
|
+
* no `_id` yet, and must always become a genuinely new row, never merged into an existing one.
|
|
111
|
+
*
|
|
112
|
+
* Pass `mergeByUid: true` to instead match (and replace, or insert if missing) by the document's `uid`, the
|
|
113
|
+
* framework's true logical primary key, regardless of whether `_id` was carried forward from a prior read.
|
|
114
|
+
* Useful for a single-row-per-uid document that may have been built fresh (e.g. by spreading an update onto
|
|
115
|
+
* a plain object) without preserving `_id`, where the default `_id`-only behavior would insert a *second*,
|
|
116
|
+
* duplicate document instead of updating the existing one (see `ACLUtils.saveACL()`).
|
|
92
117
|
*
|
|
93
118
|
* @param doc The document to save.
|
|
119
|
+
* @param options Driver options, plus optionally `mergeByUid` (see above).
|
|
94
120
|
* @returns The saved document.
|
|
95
121
|
*/
|
|
96
|
-
async save(doc) {
|
|
122
|
+
async save(doc, options) {
|
|
123
|
+
const { mergeByUid, ...driverOptions } = options ?? {};
|
|
97
124
|
const copy = { ...doc };
|
|
98
125
|
// Strip any undefined properties so they are omitted from the stored document
|
|
99
126
|
for (const key of Object.keys(copy)) {
|
|
@@ -101,11 +128,30 @@ export class MongoRepository {
|
|
|
101
128
|
delete copy[key];
|
|
102
129
|
}
|
|
103
130
|
}
|
|
104
|
-
if (doc.
|
|
105
|
-
|
|
131
|
+
if (mergeByUid && doc.uid !== undefined && doc.uid !== null) {
|
|
132
|
+
// MongoDB rejects a replacement document that tries to change an existing document's immutable
|
|
133
|
+
// `_id` — when matching by `uid` instead, drop whatever `_id` `doc` happened to carry and let the
|
|
134
|
+
// matched document keep its own (or let Mongo assign a fresh one on insert, captured below).
|
|
135
|
+
delete copy._id;
|
|
136
|
+
// `findOneAndReplace` (rather than `replaceOne`) so the resulting document's real `_id` is always
|
|
137
|
+
// captured in one round trip, whether this matched an existing document or inserted a new one —
|
|
138
|
+
// `replaceOne`'s result only ever reports an id for the insert case (`upsertedId`), silently
|
|
139
|
+
// leaving `doc._id` unset after merging into an existing row.
|
|
140
|
+
const saved = await this.collection.findOneAndReplace({ uid: doc.uid }, copy, {
|
|
141
|
+
...driverOptions,
|
|
142
|
+
upsert: true,
|
|
143
|
+
returnDocument: "after",
|
|
144
|
+
includeResultMetadata: false,
|
|
145
|
+
});
|
|
146
|
+
if (saved?._id !== undefined) {
|
|
147
|
+
doc._id = saved._id;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else if (doc._id !== undefined && doc._id !== null) {
|
|
151
|
+
await this.collection.replaceOne({ _id: doc._id }, copy, { ...driverOptions, upsert: true });
|
|
106
152
|
}
|
|
107
153
|
else {
|
|
108
|
-
const result = await this.collection.insertOne(copy);
|
|
154
|
+
const result = await this.collection.insertOne(copy, driverOptions);
|
|
109
155
|
doc._id = result.insertedId;
|
|
110
156
|
}
|
|
111
157
|
return doc;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoRepository.js","sourceRoot":"","sources":["../../../src/database/MongoRepository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MongoRepository.js","sourceRoot":"","sources":["../../../src/database/MongoRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getIndexMetadata } from "../decorators/PersistenceDecorators.js";
|
|
1
|
+
import { getIndexMetadata, } from "../decorators/PersistenceDecorators.js";
|
|
2
2
|
import { snakeCase } from "./NamingUtils.js";
|
|
3
3
|
/**
|
|
4
4
|
* Performs structure synchronization of MongoDB collections based on the persistence metadata of model classes.
|
|
@@ -46,10 +46,10 @@ export class MongoSchemaSync {
|
|
|
46
46
|
return info;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
// Rule 2: most ancestral class owning a
|
|
49
|
+
// Rule 2: most ancestral class owning a datasource binding
|
|
50
50
|
let owner = undefined;
|
|
51
51
|
for (let c = clazz; c && c !== Function.prototype; c = Object.getPrototypeOf(c)) {
|
|
52
|
-
if (Reflect.getOwnMetadata("rrst:
|
|
52
|
+
if (Reflect.getOwnMetadata("rrst:datasource", c)) {
|
|
53
53
|
owner = c;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoSchemaSync.js","sourceRoot":"","sources":["../../../src/database/MongoSchemaSync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MongoSchemaSync.js","sourceRoot":"","sources":["../../../src/database/MongoSchemaSync.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,gBAAgB,GAInB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAqB7C;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,eAAe;IAIxB,YAAY,EAAM,EAAE,MAAY;QAC5B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,qBAAqB,CAAC,KAAU;QACnC,0CAA0C;QAC1C,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,MAAM,aAAa,GAA8B,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;YACjG,IAAI,aAAa,EAAE,CAAC;gBAChB,MAAM,IAAI,GAAmB;oBACzB,IAAI,EAAE,aAAa,CAAC,IAAK;oBACzB,OAAO,EAAE,EAAE;iBACd,CAAC;gBACF,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;oBAC1B,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC1D,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,2DAA2D;QAC3D,IAAI,KAAK,GAAQ,SAAS,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,IAAI,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC/C,KAAK,GAAG,CAAC,CAAC;YACd,CAAC;QACL,CAAC;QAED,wCAAwC;QACxC,OAAO;YACH,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;YACtC,OAAO,EAAE,EAAE;SACd,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,WAAW,CAAC,QAAuB;QAC5C,mGAAmG;QACnG,gGAAgG;QAChG,MAAM,WAAW,GAAgC,IAAI,GAAG,EAAE,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAmB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/C,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,cAAc,CAAC,IAAoB;QAC7C,oDAAoD;QACpD,MAAM,QAAQ,GAAe,MAAM,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9G,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,uBAAuB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAChB,qCAAqC;gBACrC,IAAI,GAAG,CAAC,QAAQ,KAAK,iBAAiB,EAAE,CAAC;oBACrC,MAAM,GAAG,CAAC;gBACd,CAAC;YACL,CAAC;QACL,CAAC;QAED,qFAAqF;QACrF,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QAChD,MAAM,OAAO,GAA8B,IAAI,GAAG,EAAE,CAAC;QACrD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAiB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtD,wFAAwF;gBACxF,wFAAwF;gBACxF,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,eAAe,EAAE,CAAC;oBACrC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;gBACrC,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YAChD,CAAC;QACL,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,cAAc,GAAe,EAAE,CAAC;QACpC,IAAI,CAAC;YACD,cAAc,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,GAAG,CAAC,QAAQ,KAAK,mBAAmB,EAAE,CAAC;gBACvC,MAAM,GAAG,CAAC;YACd,CAAC;QACL,CAAC;QAED,0DAA0D;QAC1D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAClC,MAAM,OAAO,GAAyB,cAAc,CAAC,IAAI,CACrD,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAChE,CAAC;YAEF,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;oBACnC,SAAS;gBACb,CAAC;gBACD,2DAA2D;gBAC3D,IAAI,CAAC,MAAM,EAAE,KAAK,CACd,qBAAqB,OAAO,CAAC,IAAI,kBAAkB,IAAI,CAAC,IAAI,6BAA6B,CAC5F,CAAC;gBACF,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAc,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACJ,mGAAmG;gBACnG,MAAM,QAAQ,GAAyB,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5F,IAAI,QAAQ,EAAE,CAAC;oBACX,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,kBAAkB,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAC;oBACjG,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1C,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,kBAAkB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAClF,CAAC;YAED,MAAM,OAAO,GAAQ;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpG,CAAC;YACF,4FAA4F;YAC5F,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACvC,CAAC;YACD,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAgB;QACnC,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACjC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO;YACH,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChE,GAAG;YACH,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK;YACrC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK;YACrC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU;YACpC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB;YACpD,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;SACrC,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACK,YAAY,CAAC,IAAkB,EAAE,OAAiB;QACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS;YACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,MAAM;gBACnD,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,IAAI,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACzB,OAAO,CACH,IAAI,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;YACzC,IAAI,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;YACzC,IAAI,CAAC,kBAAkB,KAAK,CAAC,OAAO,CAAC,kBAAkB,IAAI,SAAS,CAAC;YACrE,gBAAgB,CACnB,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
///////////////////////////////////////////////////////////////////////////////
|
|
2
2
|
// Copyright (C) 2020-2026 Jean-Philippe Steinmetz. All rights reserved.
|
|
3
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
3
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
4
5
|
import "reflect-metadata";
|
|
5
6
|
/**
|
|
@@ -39,10 +40,10 @@ export function resolveCollectionName(clazz) {
|
|
|
39
40
|
return options.name;
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
|
-
// Rule 2: most ancestral class owning a
|
|
43
|
+
// Rule 2: most ancestral class owning a datasource binding
|
|
43
44
|
let owner = undefined;
|
|
44
45
|
for (let c = clazz; c && c !== Function.prototype; c = Object.getPrototypeOf(c)) {
|
|
45
|
-
if (Reflect.getOwnMetadata("rrst:
|
|
46
|
+
if (Reflect.getOwnMetadata("rrst:datasource", c)) {
|
|
46
47
|
owner = c;
|
|
47
48
|
}
|
|
48
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NamingUtils.js","sourceRoot":"","sources":["../../../src/database/NamingUtils.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wEAAwE;AACxE,+EAA+E;AAC/E,OAAO,kBAAkB,CAAC;AAG1B;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACjC,OAAO,CACH,GAAG;QACC,cAAc;SACb,OAAO,CAAC,wBAAwB,EAAE,SAAS,CAAC;QAC7C,YAAY;SACX,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,WAAW,EAAE,CACrB,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAU;IAC5C,uCAAuC;IACvC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,OAAO,GAA8B,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC3F,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,IAAI,CAAC;QACxB,CAAC;IACL,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"NamingUtils.js","sourceRoot":"","sources":["../../../src/database/NamingUtils.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wEAAwE;AACxE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,kBAAkB,CAAC;AAG1B;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACjC,OAAO,CACH,GAAG;QACC,cAAc;SACb,OAAO,CAAC,wBAAwB,EAAE,SAAS,CAAC;QAC7C,YAAY;SACX,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,WAAW,EAAE,CACrB,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAU;IAC5C,uCAAuC;IACvC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,OAAO,GAA8B,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC3F,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,IAAI,CAAC;QACxB,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,IAAI,KAAK,GAAQ,SAAS,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,IAAI,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC;YAC/C,KAAK,GAAG,CAAC,CAAC;QACd,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,OAAO,SAAS,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
11
|
+
// Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
|
|
12
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
13
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
14
|
+
import { ObjectDecorators, RedisStore } from "@rapidrest/core";
|
|
15
|
+
import { Redis } from "../decorators/DatabaseDecorators.js";
|
|
16
|
+
const { Init } = ObjectDecorators;
|
|
17
|
+
/**
|
|
18
|
+
* Implements a cache system for storing entities. Uses the `cache` Redis datastore (when configured) as the
|
|
19
|
+
* backing database. Otherwise, provides an in-memory cache store for entities.
|
|
20
|
+
*
|
|
21
|
+
* @author Jean-Philippe Steinmetz
|
|
22
|
+
*/
|
|
23
|
+
export class RedisCache extends RedisStore {
|
|
24
|
+
constructor(type) {
|
|
25
|
+
super(`cache.${type.name}.`);
|
|
26
|
+
this.type = type;
|
|
27
|
+
}
|
|
28
|
+
init() {
|
|
29
|
+
// Assign the injected redis client to the internal client RedisStore needs
|
|
30
|
+
this.client = this.redisClient;
|
|
31
|
+
// If the model class supports caching it will have a @Cache() decorator. We
|
|
32
|
+
// extract that here to get the default TTL.
|
|
33
|
+
this.defaultTTL = this.type.cacheTTL ?? this.defaultTTL;
|
|
34
|
+
}
|
|
35
|
+
load(id, skipRedis) {
|
|
36
|
+
return super.load(id, skipRedis);
|
|
37
|
+
}
|
|
38
|
+
loadMany(ids) {
|
|
39
|
+
return super.loadMany(ids);
|
|
40
|
+
}
|
|
41
|
+
loadSet(id) {
|
|
42
|
+
return super.loadSet(id);
|
|
43
|
+
}
|
|
44
|
+
save(id, data, ttl = this.defaultTTL, skipRedis = false) {
|
|
45
|
+
return super.save(id, data, ttl, skipRedis);
|
|
46
|
+
}
|
|
47
|
+
saveMany(ids, data, ttl) {
|
|
48
|
+
return super.saveMany(ids, data, ttl);
|
|
49
|
+
}
|
|
50
|
+
saveSet(id, data, idProp = "uid", ttl = this.defaultTTL) {
|
|
51
|
+
return super.saveSet(id, data, idProp, ttl);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
__decorate([
|
|
55
|
+
Redis("cache", false),
|
|
56
|
+
__metadata("design:type", Object)
|
|
57
|
+
], RedisCache.prototype, "redisClient", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
Init,
|
|
60
|
+
__metadata("design:type", Function),
|
|
61
|
+
__metadata("design:paramtypes", []),
|
|
62
|
+
__metadata("design:returntype", void 0)
|
|
63
|
+
], RedisCache.prototype, "init", null);
|
|
64
|
+
//# sourceMappingURL=RedisCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisCache.js","sourceRoot":"","sources":["../../../src/database/RedisCache.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAG5D,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC;AAElC;;;;;GAKG;AACH,MAAM,OAAO,UAAgD,SAAQ,UAAU;IAQ3E,YAAY,IAAS;QACjB,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAGO,IAAI;QACR,2EAA2E;QAC3E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAE/B,4EAA4E;QAC5E,4CAA4C;QAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC;IAC5D,CAAC;IAEM,IAAI,CAAC,EAAU,EAAE,SAAmB;QACvC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAA2B,CAAC;IAC/D,CAAC;IAEM,QAAQ,CAAC,GAAa;QACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAA+B,CAAC;IAC7D,CAAC;IAEM,OAAO,CAAC,EAAU;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,CAA2C,CAAC;IACvE,CAAC;IAEM,IAAI,CAAC,EAAU,EAAE,IAAO,EAAE,MAAc,IAAI,CAAC,UAAU,EAAE,YAAqB,KAAK;QACtF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAEM,QAAQ,CAAC,GAAa,EAAE,IAAS,EAAE,GAAY;QAClD,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAEM,OAAO,CAAC,EAAU,EAAE,IAAS,EAAE,SAAiB,KAAK,EAAE,MAAc,IAAI,CAAC,UAAU;QACvF,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;CACJ;AA3Ca;IADT,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;;+CACkB;AAWhC;IADP,IAAI;;;;sCAQJ"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
///////////////////////////////////////////////////////////////////////////////
|
|
2
2
|
// Copyright (C) 2020-2026 Jean-Philippe Steinmetz. All rights reserved.
|
|
3
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
3
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
4
5
|
// NOTE: This is the only module in the library that is permitted to import the optional `typeorm` package at
|
|
5
|
-
// runtime. It is loaded dynamically by `ConnectionManager` if (and only if) a SQL
|
|
6
|
+
// runtime. It is loaded dynamically by `ConnectionManager` if (and only if) a SQL datasource is configured.
|
|
6
7
|
import * as typeorm from "typeorm";
|
|
7
8
|
import { pendingTypeOrmColumns } from "../decorators/ModelDecorators.js";
|
|
8
9
|
import { ModelUtils } from "../models/ModelUtils.js";
|
|
@@ -47,7 +48,24 @@ export function registerFrameworkMetadata(entities) {
|
|
|
47
48
|
registerIndex(storage, c, index);
|
|
48
49
|
}
|
|
49
50
|
}
|
|
51
|
+
// A @TrackChanges() entity stores one row per (uid, version) rather than one row per uid, so its
|
|
52
|
+
// primary key must cover both columns. Otherwise, inserting a second version row always violates
|
|
53
|
+
// uid's own primary key constraint. Every other entity keeps uid alone as its primary key.
|
|
54
|
+
const isTrackChanges = !!entity.trackChanges;
|
|
55
|
+
// Primary key columns are already guaranteed unique by the database; an additional explicit index on the
|
|
56
|
+
// same single column is redundant and, for SQLite in particular, collides with the index that TypeORM
|
|
57
|
+
// generates automatically to enforce uniqueness of non-integer primary keys.
|
|
58
|
+
const primaryProperties = new Set();
|
|
59
|
+
for (let proto = entity.prototype; proto && proto !== Object.prototype; proto = Object.getPrototypeOf(proto)) {
|
|
60
|
+
const columns = Reflect.getOwnMetadata("rrst:columns", proto) ?? [];
|
|
61
|
+
for (const column of columns) {
|
|
62
|
+
if (column.options.primary || (isTrackChanges && column.propertyName === "version")) {
|
|
63
|
+
primaryProperties.add(column.propertyName);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
50
67
|
// Register columns and property-level indexes for every level of the prototype chain
|
|
68
|
+
let versionColumnType;
|
|
51
69
|
for (let proto = entity.prototype; proto && proto !== Object.prototype; proto = Object.getPrototypeOf(proto)) {
|
|
52
70
|
const target = proto.constructor;
|
|
53
71
|
const columns = Reflect.getOwnMetadata("rrst:columns", proto) ?? [];
|
|
@@ -56,8 +74,12 @@ export function registerFrameworkMetadata(entities) {
|
|
|
56
74
|
if (column.options.isObjectId) {
|
|
57
75
|
continue;
|
|
58
76
|
}
|
|
77
|
+
const resolvedType = column.options.type ?? column.designType;
|
|
78
|
+
if (isTrackChanges && column.propertyName === "version") {
|
|
79
|
+
versionColumnType = resolvedType;
|
|
80
|
+
}
|
|
59
81
|
const exists = storage.columns.some((c) => c.target === target && c.propertyName === column.propertyName);
|
|
60
|
-
if (exists || !
|
|
82
|
+
if (exists || !resolvedType) {
|
|
61
83
|
continue;
|
|
62
84
|
}
|
|
63
85
|
storage.columns.push({
|
|
@@ -65,7 +87,7 @@ export function registerFrameworkMetadata(entities) {
|
|
|
65
87
|
propertyName: column.propertyName,
|
|
66
88
|
mode: "regular",
|
|
67
89
|
options: {
|
|
68
|
-
type:
|
|
90
|
+
type: resolvedType,
|
|
69
91
|
...(column.options.name !== undefined ? { name: column.options.name } : {}),
|
|
70
92
|
...(column.options.nullable !== undefined ? { nullable: column.options.nullable } : {}),
|
|
71
93
|
...(column.options.primary ? { primary: true } : {}),
|
|
@@ -74,9 +96,29 @@ export function registerFrameworkMetadata(entities) {
|
|
|
74
96
|
}
|
|
75
97
|
const indexes = Reflect.getOwnMetadata("rrst:indexes", proto) ?? [];
|
|
76
98
|
for (const index of indexes) {
|
|
99
|
+
if (index.columns.length === 1 && primaryProperties.has(index.columns[0])) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
77
102
|
registerIndex(storage, target, index);
|
|
78
103
|
}
|
|
79
104
|
}
|
|
105
|
+
// Promote "version" to a primary column for this trackChanges entity specifically. This can't be done
|
|
106
|
+
// by mutating the shared BaseEntity-level "version" registration above (that's visible to, and would
|
|
107
|
+
// incorrectly promote, every other entity that inherits it too). So it's registered separately here,
|
|
108
|
+
// under this entity's own (leaf) target instead. TypeORM resolves an entity's columns by walking its
|
|
109
|
+
// whole inheritance chain and, when the same property name is registered against more than one class
|
|
110
|
+
// in that chain, keeps whichever registration appears FIRST in TypeORM's metadata args storage array
|
|
111
|
+
// (see MetadataArgsStorage.filterByTargetAndWithoutDuplicateProperties).
|
|
112
|
+
if (isTrackChanges &&
|
|
113
|
+
versionColumnType &&
|
|
114
|
+
!storage.columns.some((c) => c.target === entity && c.propertyName === "version")) {
|
|
115
|
+
storage.columns.unshift({
|
|
116
|
+
target: entity,
|
|
117
|
+
propertyName: "version",
|
|
118
|
+
mode: "regular",
|
|
119
|
+
options: { type: versionColumnType, primary: true },
|
|
120
|
+
});
|
|
121
|
+
}
|
|
80
122
|
}
|
|
81
123
|
}
|
|
82
124
|
/**
|
|
@@ -84,9 +126,7 @@ export function registerFrameworkMetadata(entities) {
|
|
|
84
126
|
* does not already exist.
|
|
85
127
|
*/
|
|
86
128
|
function registerIndex(storage, target, index) {
|
|
87
|
-
const exists = storage.indices.some((i) => i.target === target &&
|
|
88
|
-
i.name === index.name &&
|
|
89
|
-
JSON.stringify(i.columns) === JSON.stringify(index.columns));
|
|
129
|
+
const exists = storage.indices.some((i) => i.target === target && i.name === index.name && JSON.stringify(i.columns) === JSON.stringify(index.columns));
|
|
90
130
|
if (exists) {
|
|
91
131
|
return;
|
|
92
132
|
}
|
|
@@ -107,18 +147,18 @@ function registerIndex(storage, target, index) {
|
|
|
107
147
|
expireAfterSeconds: index.options.expireAfterSeconds,
|
|
108
148
|
});
|
|
109
149
|
}
|
|
110
|
-
/** Tracks active DataSource instances by
|
|
150
|
+
/** Tracks active DataSource instances by datasource name to support reconnection. */
|
|
111
151
|
const dataSources = new Map();
|
|
112
152
|
/**
|
|
113
|
-
* Establishes a TypeORM connection for the given SQL
|
|
153
|
+
* Establishes a TypeORM connection for the given SQL datasource configuration. If a connection with the given name
|
|
114
154
|
* already exists it is reused (and reconnected if necessary).
|
|
115
155
|
*
|
|
116
|
-
* @param name The name of the
|
|
117
|
-
* @param
|
|
156
|
+
* @param name The name of the datasource to connect to.
|
|
157
|
+
* @param datasource The datasource configuration to pass to TypeORM.
|
|
118
158
|
* @param entities The list of entity classes assigned to this connection.
|
|
119
159
|
* @param url The connection URL of the database.
|
|
120
160
|
*/
|
|
121
|
-
export async function connect(name,
|
|
161
|
+
export async function connect(name, datasource, entities, url) {
|
|
122
162
|
// Make TypeORM's query operators available to query building utilities
|
|
123
163
|
ModelUtils.setTypeOrm(typeorm);
|
|
124
164
|
// Bridge framework-declared persistence metadata into TypeORM
|
|
@@ -131,13 +171,13 @@ export async function connect(name, datastore, entities, url) {
|
|
|
131
171
|
}
|
|
132
172
|
else {
|
|
133
173
|
connection = new typeorm.DataSource({
|
|
134
|
-
...
|
|
174
|
+
...datasource,
|
|
135
175
|
entities,
|
|
136
176
|
url,
|
|
137
177
|
});
|
|
138
178
|
await connection.initialize();
|
|
139
179
|
dataSources.set(name, connection);
|
|
140
|
-
if (
|
|
180
|
+
if (datasource.runMigrations) {
|
|
141
181
|
await connection.runMigrations();
|
|
142
182
|
}
|
|
143
183
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeOrmSupport.js","sourceRoot":"","sources":["../../../src/database/TypeOrmSupport.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wEAAwE;AACxE,+EAA+E;AAC/E,6GAA6G;AAC7G,
|
|
1
|
+
{"version":3,"file":"TypeOrmSupport.js","sourceRoot":"","sources":["../../../src/database/TypeOrmSupport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|