@rapidrest/service-core 1.0.0-beta.1

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.
Files changed (332) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +16 -0
  3. package/dist/lib/ApiErrors.js +41 -0
  4. package/dist/lib/ApiErrors.js.map +1 -0
  5. package/dist/lib/BackgroundService.js +16 -0
  6. package/dist/lib/BackgroundService.js.map +1 -0
  7. package/dist/lib/BackgroundServiceManager.js +135 -0
  8. package/dist/lib/BackgroundServiceManager.js.map +1 -0
  9. package/dist/lib/BulkError.js +24 -0
  10. package/dist/lib/BulkError.js.map +1 -0
  11. package/dist/lib/EventListenerManager.js +161 -0
  12. package/dist/lib/EventListenerManager.js.map +1 -0
  13. package/dist/lib/NetUtils.js +103 -0
  14. package/dist/lib/NetUtils.js.map +1 -0
  15. package/dist/lib/NotificationUtils.js +34 -0
  16. package/dist/lib/NotificationUtils.js.map +1 -0
  17. package/dist/lib/ObjectFactory.js +90 -0
  18. package/dist/lib/ObjectFactory.js.map +1 -0
  19. package/dist/lib/OpenApiSpec.js +748 -0
  20. package/dist/lib/OpenApiSpec.js.map +1 -0
  21. package/dist/lib/Server.js +549 -0
  22. package/dist/lib/Server.js.map +1 -0
  23. package/dist/lib/Types.js +2 -0
  24. package/dist/lib/Types.js.map +1 -0
  25. package/dist/lib/auth/AuthMiddleware.js +229 -0
  26. package/dist/lib/auth/AuthMiddleware.js.map +1 -0
  27. package/dist/lib/auth/AuthStrategy.js +2 -0
  28. package/dist/lib/auth/AuthStrategy.js.map +1 -0
  29. package/dist/lib/auth/BasicStrategy.js +106 -0
  30. package/dist/lib/auth/BasicStrategy.js.map +1 -0
  31. package/dist/lib/auth/JWTStrategy.js +161 -0
  32. package/dist/lib/auth/JWTStrategy.js.map +1 -0
  33. package/dist/lib/auth/index.js +5 -0
  34. package/dist/lib/auth/index.js.map +1 -0
  35. package/dist/lib/database/ConnectionKinds.js +14 -0
  36. package/dist/lib/database/ConnectionKinds.js.map +1 -0
  37. package/dist/lib/database/ConnectionManager.js +161 -0
  38. package/dist/lib/database/ConnectionManager.js.map +1 -0
  39. package/dist/lib/database/MongoConnection.js +86 -0
  40. package/dist/lib/database/MongoConnection.js.map +1 -0
  41. package/dist/lib/database/MongoRepository.js +136 -0
  42. package/dist/lib/database/MongoRepository.js.map +1 -0
  43. package/dist/lib/database/MongoSchemaSync.js +136 -0
  44. package/dist/lib/database/MongoSchemaSync.js.map +1 -0
  45. package/dist/lib/database/NamingUtils.js +52 -0
  46. package/dist/lib/database/NamingUtils.js.map +1 -0
  47. package/dist/lib/database/TypeOrmSupport.js +146 -0
  48. package/dist/lib/database/TypeOrmSupport.js.map +1 -0
  49. package/dist/lib/database/index.js +7 -0
  50. package/dist/lib/database/index.js.map +1 -0
  51. package/dist/lib/decorators/DatabaseDecorators.js +52 -0
  52. package/dist/lib/decorators/DatabaseDecorators.js.map +1 -0
  53. package/dist/lib/decorators/DocDecorators.js +120 -0
  54. package/dist/lib/decorators/DocDecorators.js.map +1 -0
  55. package/dist/lib/decorators/EventDecorators.js +24 -0
  56. package/dist/lib/decorators/EventDecorators.js.map +1 -0
  57. package/dist/lib/decorators/ModelDecorators.js +173 -0
  58. package/dist/lib/decorators/ModelDecorators.js.map +1 -0
  59. package/dist/lib/decorators/PersistenceDecorators.js +177 -0
  60. package/dist/lib/decorators/PersistenceDecorators.js.map +1 -0
  61. package/dist/lib/decorators/RouteDecorators.js +324 -0
  62. package/dist/lib/decorators/RouteDecorators.js.map +1 -0
  63. package/dist/lib/decorators/index.js +7 -0
  64. package/dist/lib/decorators/index.js.map +1 -0
  65. package/dist/lib/http/Adapters.js +230 -0
  66. package/dist/lib/http/Adapters.js.map +1 -0
  67. package/dist/lib/http/Router.js +403 -0
  68. package/dist/lib/http/Router.js.map +1 -0
  69. package/dist/lib/http/WebSocket.js +82 -0
  70. package/dist/lib/http/WebSocket.js.map +1 -0
  71. package/dist/lib/http/index.js +4 -0
  72. package/dist/lib/http/index.js.map +1 -0
  73. package/dist/lib/http/types.js +5 -0
  74. package/dist/lib/http/types.js.map +1 -0
  75. package/dist/lib/index.js +18 -0
  76. package/dist/lib/index.js.map +1 -0
  77. package/dist/lib/models/BaseEntity.js +83 -0
  78. package/dist/lib/models/BaseEntity.js.map +1 -0
  79. package/dist/lib/models/BaseMongoEntity.js +40 -0
  80. package/dist/lib/models/BaseMongoEntity.js.map +1 -0
  81. package/dist/lib/models/ModelUtils.js +645 -0
  82. package/dist/lib/models/ModelUtils.js.map +1 -0
  83. package/dist/lib/models/RecoverableBaseEntity.js +39 -0
  84. package/dist/lib/models/RecoverableBaseEntity.js.map +1 -0
  85. package/dist/lib/models/RecoverableBaseMongoEntity.js +40 -0
  86. package/dist/lib/models/RecoverableBaseMongoEntity.js.map +1 -0
  87. package/dist/lib/models/RepoUtils.js +717 -0
  88. package/dist/lib/models/RepoUtils.js.map +1 -0
  89. package/dist/lib/models/SimpleEntity.js +42 -0
  90. package/dist/lib/models/SimpleEntity.js.map +1 -0
  91. package/dist/lib/models/SimpleMongoEntity.js +38 -0
  92. package/dist/lib/models/SimpleMongoEntity.js.map +1 -0
  93. package/dist/lib/models/StatusExtraData.js +15 -0
  94. package/dist/lib/models/StatusExtraData.js.map +1 -0
  95. package/dist/lib/models/index.js +10 -0
  96. package/dist/lib/models/index.js.map +1 -0
  97. package/dist/lib/routes/AdminRoute.js +268 -0
  98. package/dist/lib/routes/AdminRoute.js.map +1 -0
  99. package/dist/lib/routes/MetricsRoute.js +86 -0
  100. package/dist/lib/routes/MetricsRoute.js.map +1 -0
  101. package/dist/lib/routes/ModelRoute.js +481 -0
  102. package/dist/lib/routes/ModelRoute.js.map +1 -0
  103. package/dist/lib/routes/OpenAPIRoute.js +115 -0
  104. package/dist/lib/routes/OpenAPIRoute.js.map +1 -0
  105. package/dist/lib/routes/RouteUtils.js +445 -0
  106. package/dist/lib/routes/RouteUtils.js.map +1 -0
  107. package/dist/lib/routes/StatusRoute.js +55 -0
  108. package/dist/lib/routes/StatusRoute.js.map +1 -0
  109. package/dist/lib/routes/index.js +7 -0
  110. package/dist/lib/routes/index.js.map +1 -0
  111. package/dist/lib/security/ACLRouteMongo.js +194 -0
  112. package/dist/lib/security/ACLRouteMongo.js.map +1 -0
  113. package/dist/lib/security/ACLRouteSQL.js +193 -0
  114. package/dist/lib/security/ACLRouteSQL.js.map +1 -0
  115. package/dist/lib/security/ACLUtils.js +457 -0
  116. package/dist/lib/security/ACLUtils.js.map +1 -0
  117. package/dist/lib/security/AccessControlList.js +18 -0
  118. package/dist/lib/security/AccessControlList.js.map +1 -0
  119. package/dist/lib/security/AccessControlListMongo.js +155 -0
  120. package/dist/lib/security/AccessControlListMongo.js.map +1 -0
  121. package/dist/lib/security/AccessControlListSQL.js +149 -0
  122. package/dist/lib/security/AccessControlListSQL.js.map +1 -0
  123. package/dist/lib/security/index.js +3 -0
  124. package/dist/lib/security/index.js.map +1 -0
  125. package/dist/lib/test/index.js +3 -0
  126. package/dist/lib/test/index.js.map +1 -0
  127. package/dist/lib/test/request.js +99 -0
  128. package/dist/lib/test/request.js.map +1 -0
  129. package/dist/lib/test/requestws.js +173 -0
  130. package/dist/lib/test/requestws.js.map +1 -0
  131. package/dist/types/ApiErrors.d.ts +38 -0
  132. package/dist/types/BackgroundService.d.ts +30 -0
  133. package/dist/types/BackgroundServiceManager.d.ts +66 -0
  134. package/dist/types/BulkError.d.ts +11 -0
  135. package/dist/types/EventListenerManager.d.ts +36 -0
  136. package/dist/types/NetUtils.d.ts +29 -0
  137. package/dist/types/NotificationUtils.d.ts +25 -0
  138. package/dist/types/ObjectFactory.d.ts +17 -0
  139. package/dist/types/OpenApiSpec.d.ts +114 -0
  140. package/dist/types/Server.d.ts +180 -0
  141. package/dist/types/Types.d.ts +8 -0
  142. package/dist/types/auth/AuthMiddleware.d.ts +42 -0
  143. package/dist/types/auth/AuthStrategy.d.ts +32 -0
  144. package/dist/types/auth/BasicStrategy.d.ts +33 -0
  145. package/dist/types/auth/JWTStrategy.d.ts +61 -0
  146. package/dist/types/auth/index.d.ts +4 -0
  147. package/dist/types/database/ConnectionKinds.d.ts +7 -0
  148. package/dist/types/database/ConnectionManager.d.ts +35 -0
  149. package/dist/types/database/MongoConnection.d.ts +54 -0
  150. package/dist/types/database/MongoRepository.d.ts +92 -0
  151. package/dist/types/database/MongoSchemaSync.d.ts +41 -0
  152. package/dist/types/database/NamingUtils.d.ts +24 -0
  153. package/dist/types/database/TypeOrmSupport.d.ts +20 -0
  154. package/dist/types/database/index.d.ts +6 -0
  155. package/dist/types/decorators/DatabaseDecorators.d.ts +18 -0
  156. package/dist/types/decorators/DocDecorators.d.ts +69 -0
  157. package/dist/types/decorators/EventDecorators.d.ts +12 -0
  158. package/dist/types/decorators/ModelDecorators.d.ts +80 -0
  159. package/dist/types/decorators/PersistenceDecorators.d.ts +117 -0
  160. package/dist/types/decorators/RouteDecorators.d.ts +172 -0
  161. package/dist/types/decorators/index.d.ts +6 -0
  162. package/dist/types/http/Adapters.d.ts +68 -0
  163. package/dist/types/http/Router.d.ts +99 -0
  164. package/dist/types/http/WebSocket.d.ts +56 -0
  165. package/dist/types/http/index.d.ts +6 -0
  166. package/dist/types/http/types.d.ts +54 -0
  167. package/dist/types/index.d.ts +17 -0
  168. package/dist/types/models/BaseEntity.d.ts +29 -0
  169. package/dist/types/models/BaseMongoEntity.d.ts +13 -0
  170. package/dist/types/models/ModelUtils.d.ts +166 -0
  171. package/dist/types/models/RecoverableBaseEntity.d.ts +16 -0
  172. package/dist/types/models/RecoverableBaseMongoEntity.d.ts +16 -0
  173. package/dist/types/models/RepoUtils.d.ts +154 -0
  174. package/dist/types/models/SimpleEntity.d.ts +14 -0
  175. package/dist/types/models/SimpleMongoEntity.d.ts +15 -0
  176. package/dist/types/models/StatusExtraData.d.ts +6 -0
  177. package/dist/types/models/index.d.ts +9 -0
  178. package/dist/types/routes/AdminRoute.d.ts +47 -0
  179. package/dist/types/routes/MetricsRoute.d.ts +15 -0
  180. package/dist/types/routes/ModelRoute.d.ts +226 -0
  181. package/dist/types/routes/OpenAPIRoute.d.ts +17 -0
  182. package/dist/types/routes/RouteUtils.d.ts +55 -0
  183. package/dist/types/routes/StatusRoute.d.ts +11 -0
  184. package/dist/types/routes/index.d.ts +6 -0
  185. package/dist/types/security/ACLRouteMongo.d.ts +19 -0
  186. package/dist/types/security/ACLRouteSQL.d.ts +19 -0
  187. package/dist/types/security/ACLUtils.d.ts +94 -0
  188. package/dist/types/security/AccessControlList.d.ts +103 -0
  189. package/dist/types/security/AccessControlListMongo.d.ts +24 -0
  190. package/dist/types/security/AccessControlListSQL.d.ts +24 -0
  191. package/dist/types/security/index.d.ts +2 -0
  192. package/dist/types/test/index.d.ts +2 -0
  193. package/dist/types/test/request.d.ts +24 -0
  194. package/dist/types/test/requestws.d.ts +21 -0
  195. package/docs/Makefile +20 -0
  196. package/docs/conf.py +58 -0
  197. package/docs/index.rst +17 -0
  198. package/docs/make.bat +35 -0
  199. package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/README.md +13 -0
  200. package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/MongoRepository.md +25 -0
  201. package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/RedisConnection.md +25 -0
  202. package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/Repository.md +25 -0
  203. package/docs/reference/@rapidrest/namespaces/DocDecorators/README.md +23 -0
  204. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Default.md +25 -0
  205. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Description.md +25 -0
  206. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Document.md +25 -0
  207. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Example.md +25 -0
  208. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Format.md +25 -0
  209. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Returns.md +28 -0
  210. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Summary.md +25 -0
  211. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Tags.md +25 -0
  212. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/TypeInfo.md +28 -0
  213. package/docs/reference/@rapidrest/namespaces/DocDecorators/interfaces/DocumentsData.md +57 -0
  214. package/docs/reference/@rapidrest/namespaces/EventDecorators/README.md +12 -0
  215. package/docs/reference/@rapidrest/namespaces/EventDecorators/functions/EventListener.md +17 -0
  216. package/docs/reference/@rapidrest/namespaces/EventDecorators/functions/OnEvent.md +26 -0
  217. package/docs/reference/@rapidrest/namespaces/ModelDecorators/README.md +26 -0
  218. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Cache.md +25 -0
  219. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/ChildEntity.md +18 -0
  220. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/DataStore.md +25 -0
  221. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Identifier.md +27 -0
  222. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Protect.md +35 -0
  223. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Reference.md +25 -0
  224. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Shard.md +27 -0
  225. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/TrackChanges.md +26 -0
  226. package/docs/reference/@rapidrest/namespaces/ModelDecorators/interfaces/PendingTypeOrmColumn.md +45 -0
  227. package/docs/reference/@rapidrest/namespaces/ModelDecorators/variables/pendingTypeOrmColumns.md +14 -0
  228. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/README.md +25 -0
  229. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Column.md +25 -0
  230. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Entity.md +26 -0
  231. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Index.md +119 -0
  232. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/PrimaryColumn.md +25 -0
  233. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Unique.md +68 -0
  234. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getColumnMetadata.md +26 -0
  235. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getEntityName.md +26 -0
  236. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getIndexMetadata.md +27 -0
  237. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/ColumnInfo.md +41 -0
  238. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/ColumnOptions.md +51 -0
  239. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/IndexInfo.md +41 -0
  240. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/IndexOptions.md +51 -0
  241. package/docs/reference/@rapidrest/namespaces/RouteDecorators/README.md +36 -0
  242. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/After.md +26 -0
  243. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Auth.md +33 -0
  244. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/AuthResult.md +31 -0
  245. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Before.md +25 -0
  246. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/ContentType.md +25 -0
  247. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Delete.md +25 -0
  248. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Get.md +25 -0
  249. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Head.md +25 -0
  250. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Header.md +25 -0
  251. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Method.md +31 -0
  252. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Model.md +25 -0
  253. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Options.md +25 -0
  254. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Param.md +26 -0
  255. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Patch.md +25 -0
  256. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Post.md +25 -0
  257. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Protect.md +31 -0
  258. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Put.md +25 -0
  259. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Query.md +26 -0
  260. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Request.md +31 -0
  261. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/RequiresRole.md +26 -0
  262. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Response.md +31 -0
  263. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Route.md +25 -0
  264. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Socket.md +33 -0
  265. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/User.md +31 -0
  266. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Validate.md +25 -0
  267. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/WebSocket.md +25 -0
  268. package/docs/reference/README.md +20 -0
  269. package/docs/reference/classes/ACLUtils.md +251 -0
  270. package/docs/reference/classes/AdminRoute.md +51 -0
  271. package/docs/reference/classes/AuthMiddleware.md +131 -0
  272. package/docs/reference/classes/BackgroundService.md +117 -0
  273. package/docs/reference/classes/BackgroundServiceManager.md +172 -0
  274. package/docs/reference/classes/BaseEntity.md +82 -0
  275. package/docs/reference/classes/BaseMongoEntity.md +107 -0
  276. package/docs/reference/classes/BasicStrategy.md +89 -0
  277. package/docs/reference/classes/BasicStrategyOptions.md +91 -0
  278. package/docs/reference/classes/BulkError.md +271 -0
  279. package/docs/reference/classes/ConnectionManager.md +75 -0
  280. package/docs/reference/classes/EventListenerManager.md +88 -0
  281. package/docs/reference/classes/JWTStrategy.md +77 -0
  282. package/docs/reference/classes/JWTStrategyOptions.md +97 -0
  283. package/docs/reference/classes/MetricsRoute.md +27 -0
  284. package/docs/reference/classes/ModelRoute.md +527 -0
  285. package/docs/reference/classes/ModelUtils.md +448 -0
  286. package/docs/reference/classes/MongoConnection.md +218 -0
  287. package/docs/reference/classes/MongoRepository.md +354 -0
  288. package/docs/reference/classes/MongoSchemaSync.md +67 -0
  289. package/docs/reference/classes/NetUtils.md +90 -0
  290. package/docs/reference/classes/NotificationUtils.md +77 -0
  291. package/docs/reference/classes/ObjectFactory.md +336 -0
  292. package/docs/reference/classes/OpenAPIRoute.md +77 -0
  293. package/docs/reference/classes/OpenApiSpec.md +892 -0
  294. package/docs/reference/classes/RecoverableBaseEntity.md +114 -0
  295. package/docs/reference/classes/RecoverableBaseMongoEntity.md +124 -0
  296. package/docs/reference/classes/RedisTransport.md +2202 -0
  297. package/docs/reference/classes/RepoUtils.md +486 -0
  298. package/docs/reference/classes/RouteUtils.md +191 -0
  299. package/docs/reference/classes/Server.md +408 -0
  300. package/docs/reference/classes/SimpleEntity.md +48 -0
  301. package/docs/reference/classes/SimpleMongoEntity.md +66 -0
  302. package/docs/reference/classes/StatusExtraData.md +57 -0
  303. package/docs/reference/classes/StatusRoute.md +26 -0
  304. package/docs/reference/enumerations/ACLAction.md +63 -0
  305. package/docs/reference/enumerations/ApiErrorMessages.md +123 -0
  306. package/docs/reference/enumerations/ApiErrors.md +123 -0
  307. package/docs/reference/functions/isSqlDataSource.md +26 -0
  308. package/docs/reference/functions/resolveCollectionName.md +33 -0
  309. package/docs/reference/functions/snakeCase.md +28 -0
  310. package/docs/reference/globals.md +91 -0
  311. package/docs/reference/interfaces/ACLRecord.md +96 -0
  312. package/docs/reference/interfaces/AccessControlList.md +76 -0
  313. package/docs/reference/interfaces/AuthResult.md +55 -0
  314. package/docs/reference/interfaces/AuthStrategy.md +57 -0
  315. package/docs/reference/interfaces/CreateRequestOptions.md +121 -0
  316. package/docs/reference/interfaces/DeleteRequestOptions.md +147 -0
  317. package/docs/reference/interfaces/FindRequestOptions.md +133 -0
  318. package/docs/reference/interfaces/JWTAuthResult.md +84 -0
  319. package/docs/reference/interfaces/RepoCreateOptions.md +95 -0
  320. package/docs/reference/interfaces/RepoDeleteOptions.md +115 -0
  321. package/docs/reference/interfaces/RepoFindOptions.md +135 -0
  322. package/docs/reference/interfaces/RepoOperationOptions.md +69 -0
  323. package/docs/reference/interfaces/RepoUpdateOptions.md +111 -0
  324. package/docs/reference/interfaces/RequestOptions.md +112 -0
  325. package/docs/reference/interfaces/TruncateRequestOptions.md +175 -0
  326. package/docs/reference/interfaces/UpdateRequestOptions.md +149 -0
  327. package/docs/reference/type-aliases/OneOrMany.md +19 -0
  328. package/docs/reference/type-aliases/OneOrNull.md +19 -0
  329. package/docs/reference/type-aliases/PartialBaseEntity.md +17 -0
  330. package/docs/reference/type-aliases/PartialSimpleEntity.md +17 -0
  331. package/docs/reference/type-aliases/UpdateObject.md +19 -0
  332. package/package.json +125 -0
@@ -0,0 +1,748 @@
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) 2020-2026 Jean-Philippe Steinmetz
12
+ ///////////////////////////////////////////////////////////////////////////////
13
+ import { oas31 as oa } from "openapi3-ts";
14
+ import merge from "deepmerge";
15
+ import * as _ from "lodash";
16
+ import { ObjectDecorators, StringUtils } from "@rapidrest/core";
17
+ const { Config, Init } = ObjectDecorators;
18
+ /**
19
+ * `OpenApiSpec` is a container for an OpenAPI specification.
20
+ *
21
+ * This class wraps the behavior of openapi-ts to make it easier to build an OpenAPI
22
+ * specification dynamically at runtime using the server RapidREST information.
23
+ *
24
+ * @author Jean-Philippe Steinmetz <rapidrests@gmail.com>
25
+ */
26
+ export class OpenApiSpec {
27
+ constructor(spec) {
28
+ this._builder = oa.OpenApiBuilder.create(spec);
29
+ }
30
+ get builder() {
31
+ return this._builder;
32
+ }
33
+ set builder(value) {
34
+ this._builder = value;
35
+ }
36
+ get openapi() {
37
+ return this._builder.getSpec().openapi;
38
+ }
39
+ get info() {
40
+ return this._builder.getSpec().info;
41
+ }
42
+ get servers() {
43
+ return this._builder.getSpec().servers;
44
+ }
45
+ get paths() {
46
+ return this._builder.getSpec().paths;
47
+ }
48
+ get components() {
49
+ return this._builder.getSpec().components;
50
+ }
51
+ get security() {
52
+ return this._builder.getSpec().security;
53
+ }
54
+ get tags() {
55
+ return this._builder.getSpec().tags;
56
+ }
57
+ get externalDocs() {
58
+ return this._builder.getSpec().externalDocs;
59
+ }
60
+ get webhooks() {
61
+ return this._builder.getSpec().webhooks;
62
+ }
63
+ init() {
64
+ this.addInfo({
65
+ title: this.config.get("title"),
66
+ description: this.config.get("description"),
67
+ termsOfService: this.config.get("termsOfService"),
68
+ contact: this.config.get("contact"),
69
+ license: this.config.get("license"),
70
+ version: this.config.get("version"),
71
+ });
72
+ this.addParameter("id", {
73
+ description: "The unique identifier of the resource.",
74
+ name: "id",
75
+ in: "path",
76
+ required: true,
77
+ schema: {
78
+ type: "string",
79
+ },
80
+ });
81
+ this.addParameter("page", {
82
+ description: "The index of the current page when retrieving paginated results.",
83
+ name: "page",
84
+ in: "query",
85
+ required: false,
86
+ schema: {
87
+ type: "number",
88
+ },
89
+ });
90
+ this.addParameter("limit", {
91
+ description: "The maximum number of records to retrieve.",
92
+ name: "limit",
93
+ in: "query",
94
+ required: false,
95
+ schema: {
96
+ type: "number",
97
+ },
98
+ });
99
+ this.addParameter("sort", {
100
+ description: "The property and direction with which to sort the results by.",
101
+ name: "sort",
102
+ in: "query",
103
+ required: false,
104
+ schema: {
105
+ oneOf: [
106
+ {
107
+ description: "The name of the property to sort by, in ascending order.",
108
+ type: "string",
109
+ example: "propertyName",
110
+ },
111
+ {
112
+ description: "The name of the property to sort by, in ascending order.",
113
+ type: "object",
114
+ example: {
115
+ "<propertyName>": "<direction>",
116
+ },
117
+ },
118
+ ],
119
+ },
120
+ });
121
+ this.addParameter("version", {
122
+ description: "The unique version of the resource.",
123
+ name: "version",
124
+ in: "query",
125
+ required: false,
126
+ schema: {
127
+ type: "number",
128
+ },
129
+ });
130
+ this.addSchema("Error", {
131
+ description: "Describes an error that has occurred within the service.",
132
+ type: "object",
133
+ properties: {
134
+ message: {
135
+ description: "The textual description of the error.",
136
+ type: "string",
137
+ },
138
+ stack: {
139
+ description: "The stack trace of the error. Only available when `environment` is set to `dev`.",
140
+ type: "object",
141
+ },
142
+ status: {
143
+ description: "The HTTP status code of the error.",
144
+ type: "number",
145
+ example: 400,
146
+ },
147
+ },
148
+ });
149
+ // Add the URL to this cluster
150
+ this.addServer({
151
+ url: this.config.get("cluster_url"),
152
+ });
153
+ }
154
+ getSpec() {
155
+ return this._builder.getSpec();
156
+ }
157
+ getSpecAsJson(replacer, space) {
158
+ return this._builder.getSpecAsJson(replacer, space);
159
+ }
160
+ getSpecAsYaml() {
161
+ return this._builder.getSpecAsYaml();
162
+ }
163
+ addOpenApiVersion(openApiVersion) {
164
+ this._builder.addOpenApiVersion(openApiVersion);
165
+ return this;
166
+ }
167
+ addInfo(info) {
168
+ this._builder.addInfo(info);
169
+ return this;
170
+ }
171
+ addContact(contact) {
172
+ this._builder.addContact(contact);
173
+ return this;
174
+ }
175
+ addLicense(license) {
176
+ this._builder.addLicense(license);
177
+ return this;
178
+ }
179
+ addTitle(title) {
180
+ this._builder.addTitle(title);
181
+ return this;
182
+ }
183
+ addDescription(description) {
184
+ this._builder.addDescription(description);
185
+ return this;
186
+ }
187
+ addTermsOfService(termsOfService) {
188
+ this._builder.addTermsOfService(termsOfService);
189
+ return this;
190
+ }
191
+ addVersion(version) {
192
+ this._builder.addVersion(version);
193
+ return this;
194
+ }
195
+ addPath(path, pathItem) {
196
+ this._builder.addPath(path, pathItem);
197
+ return this;
198
+ }
199
+ addSchema(name, schema) {
200
+ this._builder.addSchema(name, schema);
201
+ return this;
202
+ }
203
+ addResponse(name, response) {
204
+ this._builder.addResponse(name, response);
205
+ return this;
206
+ }
207
+ addParameter(name, parameter) {
208
+ this._builder.addParameter(name, parameter);
209
+ return this;
210
+ }
211
+ addExample(name, example) {
212
+ this._builder.addExample(name, example);
213
+ return this;
214
+ }
215
+ addRequestBody(name, reqBody) {
216
+ this._builder.addRequestBody(name, reqBody);
217
+ return this;
218
+ }
219
+ addHeader(name, header) {
220
+ this._builder.addHeader(name, header);
221
+ return this;
222
+ }
223
+ addSecurityScheme(name, secScheme) {
224
+ this._builder.addSecurityScheme(name, secScheme);
225
+ return this;
226
+ }
227
+ addLink(name, link) {
228
+ this._builder.addLink(name, link);
229
+ return this;
230
+ }
231
+ addCallback(name, callback) {
232
+ this._builder.addCallback(name, callback);
233
+ return this;
234
+ }
235
+ addServer(server) {
236
+ this._builder.addServer(server);
237
+ return this;
238
+ }
239
+ addTag(tag) {
240
+ this._builder.addTag(tag);
241
+ return this;
242
+ }
243
+ addExternalDocs(extDoc) {
244
+ this._builder.addExternalDocs(extDoc);
245
+ return this;
246
+ }
247
+ addWebhook(webhook, webhookItem) {
248
+ this._builder.addWebhook(webhook, webhookItem);
249
+ return this;
250
+ }
251
+ /**
252
+ * Adds a RapidREST model class to the OpenAPI specification as a schema.
253
+ *
254
+ * @param name The name of the model to add.
255
+ * @param clazz The class prototype to build the schema from.
256
+ */
257
+ addModel(name, clazz) {
258
+ const schema = this.createSchemaClass(clazz);
259
+ this._builder.addSchema(name, schema);
260
+ return this;
261
+ }
262
+ /**
263
+ * Adds a RapidREST route handler to the OpenAPI specification.
264
+ *
265
+ * @param name The name of the route handler. (e.g. findAll)
266
+ * @param path The complete path of the route handler. (e.g. `/my/resources/:id`)
267
+ * @param method The HTTP verb type that the route handler processes. (e.g. `GET`)
268
+ * @param metadata The object containing all API information about the route handler.
269
+ * @param docs The object containing all documentation information about the route handler.
270
+ * @param routeClass The parent route class that the route handler belongs to.
271
+ */
272
+ addRoute(name, path, method, metadata, docs, routeClass) {
273
+ const { after, authRequired, before } = metadata;
274
+ let { authStrategies } = metadata;
275
+ const { description, example, summary, tags } = docs;
276
+ const contentType = metadata.contentType || "application/json";
277
+ const data = {};
278
+ const mParams = [];
279
+ let aclInfo = Reflect.getMetadata("rrst:acl", routeClass) || Reflect.getMetadata("rrst:acl", routeClass, name);
280
+ let requestTypes = Reflect.getMetadata("design:type", routeClass, name);
281
+ let returnTypes = Reflect.getMetadata("design:returntype", routeClass, name);
282
+ let security = authRequired ? [] : undefined;
283
+ let requestSchemas = [];
284
+ const responseSchemas = [];
285
+ // Extract all path parameters
286
+ const parameters = [];
287
+ const regex = new RegExp(/(:[a-zA-Z0-9\-_+]+)/g);
288
+ const matches = path.match(regex);
289
+ if (matches) {
290
+ for (const param of matches) {
291
+ const name = param.substring(1);
292
+ const ref = this.getParameterReference(name);
293
+ if (ref) {
294
+ parameters.push(ref);
295
+ }
296
+ else {
297
+ parameters.push({
298
+ name,
299
+ in: "path",
300
+ required: true,
301
+ schema: {
302
+ type: "string",
303
+ },
304
+ });
305
+ }
306
+ }
307
+ }
308
+ if (parameters.length > 0) {
309
+ data.parameters = parameters;
310
+ }
311
+ // Does the endpoint use query params?
312
+ const argMetadata = Reflect.getMetadata("rrst:args", Object.getPrototypeOf(routeClass), name);
313
+ let hasQuery = false;
314
+ for (const key in argMetadata) {
315
+ const i = Number(key);
316
+ if (argMetadata[i][0] === "query") {
317
+ hasQuery = true;
318
+ const qName = argMetadata[i][1];
319
+ if (qName && !["page", "limit", "sort"].includes(qName)) {
320
+ const ref = this.getParameterReference(qName);
321
+ if (ref) {
322
+ mParams.push(ref);
323
+ }
324
+ else {
325
+ mParams.push({
326
+ name,
327
+ in: "query",
328
+ schema: {
329
+ type: "string",
330
+ },
331
+ });
332
+ }
333
+ }
334
+ }
335
+ }
336
+ // When the query is referenced as a function arg it's likely because this is a search function.
337
+ // However, this isn't always the case. For example, endpoints that have document version tracking
338
+ // may use the query parameter to refer to a specific version or have operands such as `purge`.
339
+ // In these cases we don't want to list search query parameters. Unfortunately there's no easy
340
+ // way to gaurantee detectin of this so we will do something dirty and assume anytime there's a
341
+ // `:id` in the path, that it is not in fact a search endpoint.
342
+ if (hasQuery && !path.includes(":id")) {
343
+ // The following casts are really dirty, but we know for sure the params exist.
344
+ mParams.push(this.getParameterReference("limit"));
345
+ mParams.push(this.getParameterReference("page"));
346
+ mParams.push(this.getParameterReference("sort"));
347
+ }
348
+ if (authRequired && !authStrategies) {
349
+ authStrategies = ["jwt"];
350
+ }
351
+ if (after) {
352
+ data["x-after"] = after;
353
+ }
354
+ if (before) {
355
+ data["x-before"] = before;
356
+ }
357
+ // Make sure return type info is always expressed as an array
358
+ if (!Array.isArray(requestTypes)) {
359
+ // Ignore the Function type, it means an explicit request type wasn't provided
360
+ requestTypes = requestTypes?.name.toLowerCase() !== "function" ? [requestTypes] : [];
361
+ }
362
+ // Create the list of accepted request schemas based on the metadata
363
+ for (const typeInfo of requestTypes) {
364
+ if (typeInfo) {
365
+ if (typeInfo) {
366
+ requestSchemas.push(this.createSchemaObject(typeInfo));
367
+ }
368
+ }
369
+ }
370
+ if (routeClass.modelClass) {
371
+ // Look up reference to schema for route's associated data model (where applicable)
372
+ const fqn = routeClass.modelClass.fqn || routeClass.modelClass.name;
373
+ let schema = this.getSchemaReference(fqn);
374
+ // If no reference was found we'll create the schema definition now and link it
375
+ if (!schema) {
376
+ this.addModel(fqn, routeClass.modelClass);
377
+ schema = this.getSchemaReference(fqn);
378
+ }
379
+ if (schema) {
380
+ aclInfo = Reflect.getMetadata("rrst:classACL", routeClass.modelClass) || aclInfo;
381
+ data["x-schema"] = fqn;
382
+ // If the request schemas aren't explicitly declared we will infer them based on the method
383
+ // type and model class.
384
+ if (requestSchemas.length === 0 && ["patch", "post", "put"].includes(method.toLowerCase())) {
385
+ requestSchemas.push(schema);
386
+ }
387
+ }
388
+ }
389
+ data["x-name"] = routeClass._fqn || routeClass.fqn || routeClass.constructor.fqn || routeClass.constructor.name;
390
+ // Convert the list of authStrategies to a SecurityRequirementObject array
391
+ if (security) {
392
+ for (const authStrategy of authStrategies) {
393
+ security.push({ [authStrategy]: [] });
394
+ }
395
+ }
396
+ // Make sure return type info is always expressed as an array
397
+ if (!Array.isArray(returnTypes)) {
398
+ // Ignore the Function type, it means an explicit request type wasn't provided
399
+ // Treat Promises as standard objects, we don't know for sure if the promise has a return value,
400
+ // but it's a fairly safe assumption.
401
+ if (returnTypes) {
402
+ if (returnTypes.name.toLowerCase() !== "promise") {
403
+ returnTypes = [Object];
404
+ }
405
+ else if (returnTypes.name.toLowerCase() !== "function") {
406
+ returnTypes = [returnTypes];
407
+ }
408
+ }
409
+ else {
410
+ returnTypes = [];
411
+ }
412
+ }
413
+ for (const typeInfo of returnTypes) {
414
+ if (typeInfo) {
415
+ responseSchemas.push(this.createSchemaObject(typeInfo));
416
+ }
417
+ }
418
+ // If the path has `.websocket` at the end, make sure to add the `x-upgrade` extension
419
+ // Also remove all response schemas since they don't apply.
420
+ if (path.includes(".websocket")) {
421
+ data["x-upgrade"] = true;
422
+ responseSchemas.splice(0, responseSchemas.length);
423
+ }
424
+ const errorContent = {
425
+ ["application/json"]: {
426
+ schema: this.getSchemaReference("Error"),
427
+ },
428
+ };
429
+ // Finally add the operation object for the given method
430
+ const opObject = {
431
+ description,
432
+ parameters: mParams.length > 0 ? mParams : undefined,
433
+ requestBody: requestSchemas.length > 0
434
+ ? {
435
+ content: {
436
+ [contentType]: {
437
+ example: example,
438
+ schema: requestSchemas.length > 1
439
+ ? {
440
+ oneOf: requestSchemas,
441
+ }
442
+ : requestSchemas[0],
443
+ },
444
+ },
445
+ }
446
+ : undefined,
447
+ responses: {
448
+ ["200"]: responseSchemas.length > 0
449
+ ? {
450
+ description: "Returned when the operation is successful.",
451
+ content: {
452
+ [contentType]: {
453
+ schema: responseSchemas.length > 1
454
+ ? {
455
+ oneOf: responseSchemas,
456
+ }
457
+ : responseSchemas[0],
458
+ },
459
+ },
460
+ }
461
+ : undefined,
462
+ ["204"]: responseSchemas.length === 0
463
+ ? {
464
+ description: "No Content",
465
+ }
466
+ : undefined,
467
+ ["400"]: requestSchemas.length > 0
468
+ ? {
469
+ description: "Returned when the request content is invalid.",
470
+ content: errorContent,
471
+ }
472
+ : undefined,
473
+ ["401"]: authRequired
474
+ ? {
475
+ description: "Returned when a valid authentication token is not provided.",
476
+ content: errorContent,
477
+ }
478
+ : undefined,
479
+ ["403"]: aclInfo
480
+ ? {
481
+ description: "Returned when the user does not have permission to perform this action.",
482
+ content: errorContent,
483
+ }
484
+ : undefined,
485
+ },
486
+ security,
487
+ summary: summary &&
488
+ StringUtils.findAndReplace(summary, {
489
+ serviceName: `${this.config.get("service_name")} -` || "Service -",
490
+ }),
491
+ tags,
492
+ "x-name": name,
493
+ };
494
+ data[method] = opObject;
495
+ this._builder.addPath(path, data);
496
+ return this;
497
+ }
498
+ /**
499
+ * Determines if the given type is a primitive or built-in class type.
500
+ * @param value
501
+ * @returns
502
+ */
503
+ isBuiltInType(value) {
504
+ // Is it a null or undefined type?
505
+ if (!value) {
506
+ return true;
507
+ }
508
+ // Check against common built-in types
509
+ const builtInTypes = [Object, Array, Boolean, Date, RegExp, Map, Number, Set, String, Promise, Function];
510
+ return builtInTypes.some((type) => value === type);
511
+ }
512
+ /**
513
+ * Creates a new SchemaObject given the specified class prototype.
514
+ *
515
+ * @param clazz The class prototype to build a schema object from.
516
+ * @returns The schema object with all information derived from the given class prototype.
517
+ */
518
+ createSchemaClass(clazz) {
519
+ const baseClass = Object.getPrototypeOf(clazz);
520
+ const cache = Reflect.getMetadata("rrst:cacheTTL", clazz);
521
+ const datastore = Reflect.getMetadata("rrst:datastore", clazz);
522
+ const defaults = new clazz();
523
+ const shardConfig = Reflect.getMetadata("rrst:shardConfig", clazz);
524
+ const trackChanges = Reflect.getMetadata("rrst:trackChanges", clazz);
525
+ const result = {};
526
+ const docs = Reflect.getMetadata("rrst:docs", clazz) || {};
527
+ const { description } = docs;
528
+ result.description = description;
529
+ result.type = "object";
530
+ result.properties = {};
531
+ result.required = [];
532
+ if (baseClass) {
533
+ result["x-baseClass"] = baseClass.fqn || baseClass.name;
534
+ }
535
+ if (cache) {
536
+ result["x-cache"] = cache;
537
+ }
538
+ if (datastore) {
539
+ result["x-datastore"] = datastore;
540
+ }
541
+ if (shardConfig) {
542
+ result["x-shard"] = shardConfig;
543
+ }
544
+ if (trackChanges) {
545
+ result["x-versioned"] = trackChanges;
546
+ }
547
+ const propertyNames = Object.getOwnPropertyNames(defaults);
548
+ for (const member of propertyNames) {
549
+ const docs = Reflect.getMetadata("rrst:docs", defaults, member) || {};
550
+ const { description, example, format } = docs;
551
+ const identifier = Reflect.getMetadata("rrst:isIdentifier", defaults, member);
552
+ let typesInfo = Reflect.getMetadata("design:type", defaults, member);
553
+ // Make sure type info is always expressed as an array
554
+ if (!Array.isArray(typesInfo)) {
555
+ typesInfo = [typesInfo];
556
+ }
557
+ const schemas = [];
558
+ for (const typeInfo of typesInfo) {
559
+ if (typeInfo) {
560
+ schemas.push(this.createSchemaObject(typeInfo, docs.default || defaults[member], description, example, format, identifier));
561
+ }
562
+ }
563
+ if (schemas.length > 1) {
564
+ result.properties[member] = {
565
+ default: docs.default || defaults[member],
566
+ description,
567
+ example,
568
+ oneOf: schemas,
569
+ };
570
+ }
571
+ else if (schemas.length === 1) {
572
+ result.properties[member] = {
573
+ default: docs.default || defaults[member],
574
+ description,
575
+ example,
576
+ ...schemas[0],
577
+ };
578
+ }
579
+ if (schemas.length > 0 && defaults[member] !== undefined) {
580
+ result.required.push(member);
581
+ }
582
+ }
583
+ return result;
584
+ }
585
+ /**
586
+ * Creates a schema object for the given type.
587
+ *
588
+ * @param typeInfo
589
+ * @param defaultValue
590
+ * @param description
591
+ * @param example
592
+ * @param format
593
+ * @param identifier
594
+ * @returns
595
+ */
596
+ createSchemaObject(typeInfo, defaultValue, description, example, format, identifier) {
597
+ let result = {
598
+ default: defaultValue,
599
+ description,
600
+ example,
601
+ format,
602
+ type: typeInfo?.name,
603
+ };
604
+ if (identifier) {
605
+ result["x-identifier"] = identifier;
606
+ }
607
+ // Generics (e.g. containers) are expressed as an array of types.
608
+ if (Array.isArray(typeInfo)) {
609
+ const contType = typeInfo[0];
610
+ const subTypeInfo = typeInfo[1];
611
+ // Set the container type as the primary schema type
612
+ if (contType.name.toLowerCase() === "map") {
613
+ result.type = "object";
614
+ }
615
+ else {
616
+ result.type = contType.name.toLowerCase();
617
+ }
618
+ // Enums have a main type of `string`, whereas containers will be an `array`,
619
+ if (contType.name.toLowerCase() === "string") {
620
+ result.enum = Object.getOwnPropertyNames(subTypeInfo).map((key) => subTypeInfo[key]);
621
+ }
622
+ else if (contType.name.toLowerCase() === "array") {
623
+ result.items = this.getSchemaReference(subTypeInfo.name) || this.createSchemaObject(subTypeInfo);
624
+ }
625
+ else if (contType.name.toLowerCase() === "map") {
626
+ if (subTypeInfo.name.toLowerCase() !== "string") {
627
+ throw new Error("Maps in OpenAPI must have a key type of string.");
628
+ }
629
+ const valType = typeInfo[2];
630
+ if (!valType) {
631
+ throw new Error("Map types require three arguments. e.g. `[Map, string, string]`");
632
+ }
633
+ // Maps are encoded as an `object` with additional properties whose type is the value type. In OpenAPI,
634
+ // map keys must always be strings.
635
+ result.type = "object";
636
+ if (this.isBuiltInType(valType)) {
637
+ result.additionalProperties = {
638
+ type: valType.name.toLowerCase(),
639
+ };
640
+ }
641
+ else {
642
+ result.additionalProperties = this.getSchemaReference(valType.name);
643
+ }
644
+ }
645
+ else {
646
+ result["$ref"] = this.getSchemaReference(subTypeInfo.name)?.$ref;
647
+ }
648
+ }
649
+ else if (this.isBuiltInType(typeInfo)) {
650
+ // Convert the name to lowercase as that is compliant with OpenAPI
651
+ if (typeInfo) {
652
+ // Buffers need to be encoded as 'byte'
653
+ if (typeInfo.name.toLowerCase() === "buffer") {
654
+ result.type = "string";
655
+ result.format = "byte";
656
+ // Date is a special case as it is represented as a string in OpenAPI with format "date"
657
+ }
658
+ else if (typeInfo.name.toLowerCase() === "date") {
659
+ result.type = "string";
660
+ result.format = "date";
661
+ }
662
+ else {
663
+ result.type = typeInfo.name.toLowerCase();
664
+ }
665
+ }
666
+ }
667
+ else {
668
+ // Unfortunately the TypeInfo information obtained from reflection here is not the same as the one
669
+ // that you get from the import itself, it's just a constructor, with all other metadata and
670
+ // inheritance information gone. So we're going to do something uncooth and assume we can link
671
+ // to a schema even if one doesn't exist at this very moment (the schema for this type may not have
672
+ // been created yet).
673
+ result = {
674
+ $ref: `#/components/schemas/${typeInfo.fqn || typeInfo.name}`,
675
+ };
676
+ }
677
+ return result;
678
+ }
679
+ /**
680
+ * Returns a reference to an existing parameter defined in the OpenAPI specification for the given name.
681
+ *
682
+ * @param name The name of the parameter to find a reference for.
683
+ * @returns The reference to the parameter with the given name, otherwise `undefined`.
684
+ */
685
+ getParameterReference(name) {
686
+ const components = this.components;
687
+ if (components && components.parameters && components.parameters[name]) {
688
+ return {
689
+ $ref: `#/components/parameters/${name}`,
690
+ };
691
+ }
692
+ return undefined;
693
+ }
694
+ /**
695
+ * Returns a reference to an existing schema defined in the OpenAPI specification for the given name.
696
+ *
697
+ * @param name The name of the schema to find a reference for.
698
+ * @returns The reference to the schema with the given name, otherwise `undefined`.
699
+ */
700
+ getSchemaReference(name) {
701
+ const components = this.components;
702
+ if (components && components.schemas && components.schemas[name]) {
703
+ return {
704
+ $ref: `#/components/schemas/${name}`,
705
+ };
706
+ }
707
+ return undefined;
708
+ }
709
+ /**
710
+ * Merges a provided OpenAPI specification with this specification.
711
+ * @param other The other OpenAPI spec object to merge.
712
+ */
713
+ merge(other) {
714
+ if (!other) {
715
+ return;
716
+ }
717
+ const options = {
718
+ arrayMerge: (target, source, options) => {
719
+ const destination = target.slice();
720
+ source.forEach((item, index) => {
721
+ if (typeof destination[index] === "undefined") {
722
+ destination[index] = options.cloneUnlessOtherwiseSpecified(item, options);
723
+ }
724
+ else if (options.isMergeableObject(item)) {
725
+ if (!_.find(destination, item)) {
726
+ destination.push(item);
727
+ }
728
+ }
729
+ });
730
+ return destination;
731
+ },
732
+ };
733
+ const otherSpec = oa.OpenApiBuilder.create(other);
734
+ const merged = merge(this.getSpec(), otherSpec.getSpec(), options);
735
+ this._builder = oa.OpenApiBuilder.create(merged);
736
+ }
737
+ }
738
+ __decorate([
739
+ Config(),
740
+ __metadata("design:type", Object)
741
+ ], OpenApiSpec.prototype, "config", void 0);
742
+ __decorate([
743
+ Init,
744
+ __metadata("design:type", Function),
745
+ __metadata("design:paramtypes", []),
746
+ __metadata("design:returntype", void 0)
747
+ ], OpenApiSpec.prototype, "init", null);
748
+ //# sourceMappingURL=OpenApiSpec.js.map