@decaf-ts/for-nest 0.1.23 → 0.2.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.
Files changed (166) hide show
  1. package/README.md +1 -1
  2. package/dist/for-nest.cjs +1 -1
  3. package/dist/for-nest.cjs.map +1 -1
  4. package/dist/for-nest.js +1 -1
  5. package/dist/for-nest.js.map +1 -1
  6. package/lib/constants.cjs +2 -1
  7. package/lib/constants.d.ts +8 -0
  8. package/lib/constants.js.map +1 -1
  9. package/lib/controllers.cjs +67 -0
  10. package/lib/controllers.d.ts +20 -0
  11. package/lib/controllers.js.map +1 -0
  12. package/lib/core-module.cjs +57 -28
  13. package/lib/core-module.d.ts +4 -4
  14. package/lib/core-module.js.map +1 -1
  15. package/lib/decaf-model/DecafModelModule.cjs +54 -49
  16. package/lib/decaf-model/DecafModelModule.d.ts +8 -6
  17. package/lib/decaf-model/DecafModelModule.js.map +1 -1
  18. package/lib/decaf-model/FromModelController.cjs +97 -48
  19. package/lib/decaf-model/FromModelController.d.ts +2 -2
  20. package/lib/decaf-model/FromModelController.js.map +1 -1
  21. package/lib/decaf-model/decorators/DecafBody.cjs +1 -1
  22. package/lib/decaf-model/decorators/DecafParams.cjs +23 -8
  23. package/lib/decaf-model/decorators/DecafParams.d.ts +1 -0
  24. package/lib/decaf-model/decorators/DecafParams.js.map +1 -1
  25. package/lib/decaf-model/types.cjs +0 -12
  26. package/lib/decaf-model/types.d.ts +3 -14
  27. package/lib/decaf-model/types.js.map +1 -1
  28. package/lib/decaf-model/utils.cjs +1 -1
  29. package/lib/decaf-model/utils.d.ts +3 -2
  30. package/lib/decaf-model/utils.js.map +1 -1
  31. package/lib/decoration.cjs +53 -33
  32. package/lib/decoration.js.map +1 -1
  33. package/lib/esm/constants.d.ts +8 -0
  34. package/lib/esm/constants.js +1 -0
  35. package/lib/esm/constants.js.map +1 -1
  36. package/lib/esm/controllers.d.ts +20 -0
  37. package/lib/esm/controllers.js +62 -0
  38. package/lib/esm/controllers.js.map +1 -0
  39. package/lib/esm/core-module.d.ts +4 -4
  40. package/lib/esm/core-module.js +57 -28
  41. package/lib/esm/core-module.js.map +1 -1
  42. package/lib/esm/decaf-model/DecafModelModule.d.ts +8 -6
  43. package/lib/esm/decaf-model/DecafModelModule.js +53 -48
  44. package/lib/esm/decaf-model/DecafModelModule.js.map +1 -1
  45. package/lib/esm/decaf-model/FromModelController.d.ts +2 -2
  46. package/lib/esm/decaf-model/FromModelController.js +100 -51
  47. package/lib/esm/decaf-model/FromModelController.js.map +1 -1
  48. package/lib/esm/decaf-model/decorators/DecafBody.js +1 -1
  49. package/lib/esm/decaf-model/decorators/DecafParams.d.ts +1 -0
  50. package/lib/esm/decaf-model/decorators/DecafParams.js +22 -8
  51. package/lib/esm/decaf-model/decorators/DecafParams.js.map +1 -1
  52. package/lib/esm/decaf-model/types.d.ts +3 -14
  53. package/lib/esm/decaf-model/types.js +1 -10
  54. package/lib/esm/decaf-model/types.js.map +1 -1
  55. package/lib/esm/decaf-model/utils.d.ts +3 -2
  56. package/lib/esm/decaf-model/utils.js +1 -1
  57. package/lib/esm/decaf-model/utils.js.map +1 -1
  58. package/lib/esm/decoration.js +45 -25
  59. package/lib/esm/decoration.js.map +1 -1
  60. package/lib/esm/factory/openapi/DtoBuilder.d.ts +15 -0
  61. package/lib/esm/factory/openapi/DtoBuilder.js +88 -0
  62. package/lib/esm/factory/openapi/DtoBuilder.js.map +1 -0
  63. package/lib/esm/factory/openapi/index.d.ts +1 -0
  64. package/lib/esm/factory/openapi/index.js +1 -0
  65. package/lib/esm/factory/openapi/index.js.map +1 -1
  66. package/lib/esm/index.d.ts +8 -6
  67. package/lib/esm/index.js +8 -6
  68. package/lib/esm/index.js.map +1 -1
  69. package/lib/esm/interceptors/DecafRequestHandlerInterceptor.d.ts +8 -4
  70. package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js +38 -6
  71. package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js.map +1 -1
  72. package/lib/esm/interceptors/context.d.ts +6 -0
  73. package/lib/esm/interceptors/context.js +12 -0
  74. package/lib/esm/interceptors/context.js.map +1 -0
  75. package/lib/esm/module.js +9 -7
  76. package/lib/esm/module.js.map +1 -1
  77. package/lib/esm/overrides/Adapter.d.ts +10 -0
  78. package/lib/esm/overrides/Adapter.js +2 -0
  79. package/lib/esm/overrides/Adapter.js.map +1 -0
  80. package/lib/esm/overrides/constants.d.ts +21 -0
  81. package/lib/esm/overrides/constants.js +22 -0
  82. package/lib/esm/overrides/constants.js.map +1 -0
  83. package/lib/esm/overrides/decoration.d.ts +30 -0
  84. package/lib/esm/overrides/decoration.js +111 -0
  85. package/lib/esm/overrides/decoration.js.map +1 -0
  86. package/lib/esm/overrides/helpers.d.ts +11 -0
  87. package/lib/esm/overrides/helpers.js +136 -0
  88. package/lib/esm/overrides/helpers.js.map +1 -0
  89. package/lib/esm/overrides/index.d.ts +4 -0
  90. package/lib/esm/overrides/index.js +5 -0
  91. package/lib/esm/overrides/index.js.map +1 -0
  92. package/lib/esm/overrides/overrides.d.ts +1 -0
  93. package/lib/esm/overrides/overrides.js +13 -0
  94. package/lib/esm/overrides/overrides.js.map +1 -0
  95. package/lib/esm/request/DecafAuthHandler.d.ts +10 -0
  96. package/lib/esm/request/DecafAuthHandler.js +37 -0
  97. package/lib/esm/request/DecafAuthHandler.js.map +1 -0
  98. package/lib/esm/request/DecafHandlerExecutor.js +1 -1
  99. package/lib/esm/request/DecafHandlerExecutor.js.map +1 -1
  100. package/lib/esm/request/DecafRequestContext.d.ts +5 -4
  101. package/lib/esm/request/DecafRequestContext.js +7 -7
  102. package/lib/esm/request/DecafRequestContext.js.map +1 -1
  103. package/lib/esm/request/RamRequestTransformer.d.ts +5 -0
  104. package/lib/esm/request/RamRequestTransformer.js +25 -0
  105. package/lib/esm/request/RamRequestTransformer.js.map +1 -0
  106. package/lib/esm/request/index.d.ts +2 -0
  107. package/lib/esm/request/index.js +2 -0
  108. package/lib/esm/request/index.js.map +1 -1
  109. package/lib/esm/types.d.ts +13 -5
  110. package/lib/factory/openapi/DtoBuilder.cjs +91 -0
  111. package/lib/factory/openapi/DtoBuilder.d.ts +15 -0
  112. package/lib/factory/openapi/DtoBuilder.js.map +1 -0
  113. package/lib/factory/openapi/index.cjs +1 -0
  114. package/lib/factory/openapi/index.d.ts +1 -0
  115. package/lib/factory/openapi/index.js.map +1 -1
  116. package/lib/index.cjs +8 -6
  117. package/lib/index.d.ts +8 -6
  118. package/lib/index.js.map +1 -1
  119. package/lib/interceptors/DecafRequestHandlerInterceptor.cjs +37 -5
  120. package/lib/interceptors/DecafRequestHandlerInterceptor.d.ts +8 -4
  121. package/lib/interceptors/DecafRequestHandlerInterceptor.js.map +1 -1
  122. package/lib/interceptors/context.cjs +17 -0
  123. package/lib/interceptors/context.d.ts +6 -0
  124. package/lib/interceptors/context.js.map +1 -0
  125. package/lib/module.cjs +9 -7
  126. package/lib/module.js.map +1 -1
  127. package/lib/overrides/Adapter.cjs +4 -0
  128. package/lib/overrides/Adapter.d.ts +10 -0
  129. package/lib/overrides/Adapter.js.map +1 -0
  130. package/lib/overrides/constants.cjs +25 -0
  131. package/lib/overrides/constants.d.ts +21 -0
  132. package/lib/overrides/constants.js.map +1 -0
  133. package/lib/overrides/decoration.cjs +120 -0
  134. package/lib/overrides/decoration.d.ts +30 -0
  135. package/lib/overrides/decoration.js.map +1 -0
  136. package/lib/overrides/helpers.cjs +146 -0
  137. package/lib/overrides/helpers.d.ts +11 -0
  138. package/lib/overrides/helpers.js.map +1 -0
  139. package/lib/overrides/index.cjs +21 -0
  140. package/lib/overrides/index.d.ts +4 -0
  141. package/lib/overrides/index.js.map +1 -0
  142. package/lib/overrides/overrides.cjs +15 -0
  143. package/lib/overrides/overrides.d.ts +1 -0
  144. package/lib/overrides/overrides.js.map +1 -0
  145. package/lib/request/DecafAuthHandler.cjs +42 -0
  146. package/lib/request/DecafAuthHandler.d.ts +10 -0
  147. package/lib/request/DecafAuthHandler.js.map +1 -0
  148. package/lib/request/DecafHandlerExecutor.cjs +1 -1
  149. package/lib/request/DecafHandlerExecutor.js.map +1 -1
  150. package/lib/request/DecafRequestContext.cjs +7 -7
  151. package/lib/request/DecafRequestContext.d.ts +5 -4
  152. package/lib/request/DecafRequestContext.js.map +1 -1
  153. package/lib/request/RamRequestTransformer.cjs +28 -0
  154. package/lib/request/RamRequestTransformer.d.ts +5 -0
  155. package/lib/request/RamRequestTransformer.js.map +1 -0
  156. package/lib/request/index.cjs +2 -0
  157. package/lib/request/index.d.ts +2 -0
  158. package/lib/request/index.js.map +1 -1
  159. package/lib/types.d.ts +13 -5
  160. package/package.json +9 -1
  161. package/lib/esm/factory/context.d.ts +0 -0
  162. package/lib/esm/factory/context.js +0 -2
  163. package/lib/esm/factory/context.js.map +0 -1
  164. package/lib/factory/context.cjs +0 -2
  165. package/lib/factory/context.d.ts +0 -0
  166. package/lib/factory/context.js.map +0 -1
package/README.md CHANGED
@@ -28,7 +28,7 @@ This repository is meant to provide an enterprise template for any standard Type
28
28
 
29
29
  Documentation available [here](https://decaf-ts.github.io/for-nest/)
30
30
 
31
- Minimal size: 7.4 KB kb gzipped
31
+ Minimal size: 9.6 KB kb gzipped
32
32
 
33
33
 
34
34
  ### Description
package/dist/for-nest.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e,t;e=this,t=function(e,t,r,a,o,i,s,n,c,p,d,l,u){"use strict";function h(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(r=>{if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:()=>e[r]})}}),t.default=e,Object.freeze(t)}var m=h(u);t.Decoration.for(r.InjectablesKeys.INJECTABLE).extend({decorator:(e,t)=>(t=t||("object"==typeof e?Object.assign(e,r.DefaultInjectablesConfig):r.DefaultInjectablesConfig),a.Injectable({scope:t.singleton?a.Scope.DEFAULT:a.Scope.REQUEST,durable:!t.singleton||void 0}))}).apply(),t.Decoration.for(r.InjectablesKeys.INJECT).extend({decorator:(e,t)=>(t,r,o)=>a.Inject(e||t)(t,r,o)}).apply(),t.Decoration.for(o.ValidationKeys.REQUIRED).extend(s.ApiProperty({required:!0})).apply(),t.Decoration.for(o.ValidationKeys.MAX).extend({decorator:e=>s.ApiProperty({maximum:e})}).apply(),t.Decoration.for(o.ValidationKeys.MIN).extend({decorator:e=>s.ApiProperty({minimum:e})}).apply(),t.Decoration.for(o.ValidationKeys.MAX_LENGTH).extend({decorator:e=>s.ApiProperty({maxLength:e})}).apply(),t.Decoration.for(o.ValidationKeys.MIN_LENGTH).extend({decorator:e=>s.ApiProperty({minLength:e})}).apply(),t.Decoration.for(o.ValidationKeys.LIST).extend({decorator:e=>{const t=Array.isArray(e)?e[0]:e;return s.ApiProperty({type:[t]})}}).apply(),t.Decoration.for(o.ValidationKeys.PATTERN).extend({decorator:e=>s.ApiProperty({pattern:"string"==typeof e?e:e.source})}).apply(),t.Decoration.for(i.PersistenceKeys.COLUMN).extend({decorator:e=>s.ApiProperty({name:e})}).apply(),t.Decoration.for(t.DecorationKeys.DESCRIPTION).extend({decorator:e=>s.ApiProperty({description:e})}).apply();const y="DecafModuleOptions",g="DecafAdapter",f="DecafRoute",_=Symbol("DecafHandlers"),A=Symbol("DecafAdapterForOptions"),b=Symbol("AUTH_HANDLER"),P="auth:meta",E="AuthRole";var w;let O=class{static{w=this}static{this._adapterInstance=null}static get log(){return this._logger||(this._logger=p.Logging.for(w)),this._logger}constructor(e,t){this.options=e,this.moduleRef=t}static async createAdapter(e){if(!this._adapterInstance){const t=this.log.for(this.createAdapter);t.info("Creating adapter instance..."),this._adapterInstance=new e.adapter(e.conf,e.alias);try{await this._adapterInstance.initialize()}catch(e){throw t.error("Failed to initialized adapter"),e}t.info("Adapter instance created successfully!")}return this._adapterInstance}static getAdapterInstance(){return this._adapterInstance}static forRoot(e){const t={provide:y,useValue:e},r={useFactory:async e=>w.createAdapter(e),provide:g,durable:!0,scope:a.Scope.DEFAULT,inject:[y]};return{module:w,providers:[r,t],exports:[r]}}async onApplicationShutdown(){const e=w.log.for(this.onApplicationShutdown),t=this.moduleRef.get(g);try{t&&(e.info("Shutting down"),await t.shutdown(),w._adapterInstance=null)}catch(t){e.error("Failed to shutdown application",t)}}};function R(e,r){const{handler:a,args:o}=t.Metadata.get(e,d.OperationKeys.REFLECT+d.OperationKeys.BLOCK)||{};return!!a&&(a(...o,r)??!1)}function D(e,r,o){const i={GET:[d.OperationKeys.READ,a.Get],POST:[d.OperationKeys.CREATE,a.Post],PUT:[d.OperationKeys.UPDATE,a.Put],PATCH:[d.OperationKeys.UPDATE,a.Patch],DELETE:[d.OperationKeys.DELETE,a.Delete]},[n,c]=i[r];return R(e,n)?t.apply(s.ApiExcludeEndpoint()):t.apply(c(o))}function v(e=[]){const t=e.map(e=>s.ApiParam({name:e.name,description:e.description??"Path parameter: "+e.name,required:e.required??!0,type:e.type??String}));return a.applyDecorators(...t)}O=w=n.__decorate([a.Global(),a.Module({}),n.__param(0,a.Inject(y)),n.__metadata("design:paramtypes",[Object,c.ModuleRef])],O);const T=a.createParamDecorator((e,t)=>{const r=t.switchToHttp().getRequest().body,o=t.getClass(),i=o.clazz;if(!i)throw new a.InternalServerErrorException(`ModelConstructor not found on controller ${o.name}. Ensure the controller was created via FromModelController.`);return r?Array.isArray(r)?r.map(e=>new i(e)):new i(r):r}),S=a.createParamDecorator((e,t)=>{const r=t.switchToHttp().getRequest(),a=r?.params??{},o=e??Object.keys(a),i=o.map(e=>a[e]);return{raw:a,valuesInOrder:i,keysInOrder:o}});function $(e=[]){const t=e.map(e=>e.name);return S(t)}function I(e){const t={GET:a.Get,POST:a.Post,PUT:a.Put,PATCH:a.Patch,DELETE:a.Delete}[e];if(!t)throw Error(`Unsupported HTTP verb "${e}". No NestJS decorator mapping was found.`);return t}function k(t){const r="string"==typeof t?t:t.name;return a.applyDecorators(a.SetMetadata(P,r),a.UseInterceptors(e.AuthInterceptor))}e.AuthInterceptor=class{constructor(e,t){this.reflector=e,this.authHandler=t}async intercept(e,t){const r=this.reflector.get(P,e.getHandler())??this.reflector.get(P,e.getClass());return r&&this.authHandler&&await this.authHandler.authorize(e,r),t.handle()}},e.AuthInterceptor=n.__decorate([a.Injectable(),n.__param(1,a.Optional()),n.__param(1,a.Inject(b)),n.__metadata("design:paramtypes",[c.Reflector,Object])],e.AuthInterceptor),e.DecafRequestContext=class{constructor(){this.cache=new Map}set(e,t){this.cache.set(e,t)}get(e){return this.cache.get(e)}},e.DecafRequestContext=n.__decorate([a.Injectable({scope:a.Scope.REQUEST})],e.DecafRequestContext),e.DecafHandlerExecutor=class{constructor(e,t){this.handlers=e,this.context=t}async exec(e,t){for(const r of this.handlers)await r.handle(this.context,e,t)}},e.DecafHandlerExecutor=n.__decorate([a.Injectable({scope:a.Scope.REQUEST}),n.__param(0,a.Inject(_)),n.__metadata("design:paramtypes",[Array,e.DecafRequestContext])],e.DecafHandlerExecutor);const C=e=>({name:e,description:e+" parameter for the query",required:!0,type:String});function F(e,t,r,o=!1){const n=I(r),c=(e=>e.split("/").filter(e=>e.startsWith(":")).map(e=>e.slice(1)))(t).map(C),p=[];return"GET"===r&&o&&p.push(s.ApiQuery({name:"direction",required:!1,enum:i.OrderDirection,description:"the sort order when applicable"}),s.ApiQuery({name:"limit",required:!1,description:"limit or page size when applicable"}),s.ApiQuery({name:"offset",required:!1,description:"offset or bookmark when applicable"})),{method:[n(t),...c.map(s.ApiParam),...p,s.ApiOperation({summary:`Retrieve records using according to "${e}".`}),s.ApiOkResponse({description:"Result successfully retrieved."}),s.ApiNoContentResponse({description:"No content returned by the method."})],params:[$(c),a.Query()]}}function M(e,t,r,a){const o=e?.prototype??e;a.method.forEach(e=>e(o,t,r)),a.params?.forEach((e,r)=>e(o,t,r))}function j(e){return async function(t,r){const a=this.log.for(e);try{a.debug(`Invoking persistence method "${e}" given parameters: ${JSON.stringify(t.valuesInOrder)}`);const{direction:o,limit:s,offset:n}=r;return await((e,t,...r)=>{if(e instanceof i.ModelService)return"function"==typeof e[t]?e[t](...r):e.statement(t,...r);if("function"==typeof e[t])return e[t](...r);throw Error(`Persistence method "${t}" not found on ${e?.constructor?.name}`)})(this.persistence,e,...t.valuesInOrder,o,s,n)}catch(t){throw a.error(`Custom query "${e}" failed`,t),t}}}function x(e,t,r){return Object.defineProperty(e.prototype||e,t,{value:r,writable:!1}),Object.getOwnPropertyDescriptor(e.prototype||e,t)}class q extends p.LoggedClass{constructor(e){super(),this.clientContext=e}get persistence(){throw Error("Not implemented")}}class N{static{this.log=p.Logging.for(N.name)}static getPersistence(e){try{return i.ModelService.getService(e)}catch(t){return i.Repository.forModel(e)}}static createQueryRoutesFromRepository(e,r=i.PersistenceKeys.QUERY){const a=N.log.for(N.createQueryRoutesFromRepository),o=e instanceof i.ModelService?e.repo:e,s=o.class,n=t.Metadata.get(o.constructor,t.Metadata.key(i.PersistenceKeys.QUERY))??{},c=t.Metadata.get(e.constructor,t.Metadata.key(f))??{};class p extends q{constructor(e){super(e),this._persistence=N.getPersistence(s)}get persistence(){const e=this.clientContext.get(A);return e?this._persistence.for(e):this._persistence}}for(const[e,t]of Object.entries(c)){const r=[t.path.replace(/^\/+|\/+$/g,"")].filter(e=>e&&e.trim()).join("/"),o=j(e);if(!o){const t=`Invalid or missing handler for model ${s.name} on decorated method ${e}`;throw a.error(t),Error(t)}const i=x(p,e,o);i&&M(p,e,i,F(e,r,t.httpMethod))}for(const[e,t]of Object.entries(n)){const a=[r,e,...(t.fields??[]).map(e=>":"+e)].filter(e=>e&&e.trim()).join("/"),o=x(p,e,j(e));o&&M(p,e,o,F(e,a,"GET",!0))}return p}static create(t){const r=N.log.for(N.create),c=o.Model.tableName(t),l=p.toKebabCase(c),u=t.name,h=N.getPersistence(t),{description:m,getPK:y,apiProperties:g,path:f}=N.getRouteParametersFromModel(t);r.debug("Creating controller for model: "+u);const _=N.createQueryRoutesFromRepository(h);let A=class extends _{static{this.clazz=t}constructor(e){super(e),this.pk=o.Model.pk(t),r.info(`Registering dynamic controller for model: ${u} route: /${l}`)}async listBy(e,t){return this.persistence.listBy(e,t.direction)}async paginateBy(e,t){return this.persistence.paginateBy(e,t.direction,t)}async findOneBy(e,t){return this.persistence.findOneBy(e,t)}async findBy(e,t,r){return this.persistence.findBy(e,t)}async statement(e,t,r){const{direction:a,offset:o,limit:s,bookmark:n}=r;switch(t=t.map(e=>("string"==typeof e?parseInt(e):e)||e),e){case i.PreparedStatementKeys.FIND_BY:break;case i.PreparedStatementKeys.LIST_BY:t.push(a);break;case i.PreparedStatementKeys.PAGE_BY:t=[t[0],a,{limit:s,offset:o,bookmark:n}];case i.PreparedStatementKeys.FIND_ONE_BY:}return this.persistence.statement(e,...t)}async createAll(e){const r=this.log.for(this.createAll);let a;r.verbose("creating new "+u);try{a=await this.persistence.createAll(e.map(e=>new t(e)))}catch(e){throw r.error("Failed to create new "+u,e),e}return r.info(`created new ${u} with id ${a[this.pk]}`),a}async create(e){const t=this.log.for(this.create);let r;t.verbose("creating new "+u);try{r=await this.persistence.create(e)}catch(e){throw t.error("Failed to create new "+u,e),e}return t.info(`created new ${u} with id ${r[this.pk]}`),r}async readAll(e){const t=this.log.for(this.readAll);let r;try{t.debug(`reading ${e.length} ${u}: ${e}`),r=await this.persistence.readAll(e)}catch(r){throw t.error(`Failed to ${u} with id ${e}`,r),r}return t.info(`read ${r.length} ${u}`),r}async read(e){const t=y(...e.valuesInOrder);if(void 0===t)throw new d.ValidationError(`No ${this.pk} provided`);const r=this.log.for(this.read);let a;try{r.debug(`reading ${u} with ${this.pk} ${t}`),a=await this.persistence.read(t)}catch(e){throw r.error(`Failed to read ${u} with id ${t}`,e),e}return r.info(`read ${u} with id ${a[this.pk]}`),a}async updateAll(e){const t=this.log.for(this.updateAll);let r;try{t.info(`updating ${e.length} ${u}`),r=await this.persistence.updateAll(e)}catch(e){throw t.error(e),e}return r}async update(e,r){const a=this.log.for(this.update),o=y(...e.valuesInOrder);if(void 0===o)throw new d.ValidationError(`No ${this.pk} provided`);let i;try{a.info(`updating ${u} with ${this.pk} ${o}`),i=await this.persistence.update(new t({...r,[this.pk]:o}))}catch(e){throw a.error(e),e}return i}async deleteAll(e){const t=this.log.for(this.deleteAll);let r;try{t.debug(`deleting ${e.length} ${u}: ${e}`),r=await this.persistence.deleteAll(e)}catch(r){throw t.error(`Failed to delete ${u} with id ${e}`,r),r}return t.info(`deleted ${r.length} ${u}`),r}async delete(e){const t=this.log.for(this.delete),r=y(...e.valuesInOrder);if(void 0===r)throw new d.ValidationError(`No ${this.pk} provided`);let a;try{t.debug(`deleting ${u} with ${this.pk} ${r}`),a=await this.persistence.delete(r)}catch(e){throw t.error(`Failed to delete ${u} with id ${r}`,e),e}return t.info(`deleted ${u} with id ${r}`),a}};return n.__decorate([D(t,"GET","listBy/:key"),s.ApiOperation({summary:`Retrieve ${u} records by query.`}),s.ApiParam({name:"key",description:"the model key to sort by"}),s.ApiQuery({name:"direction",required:!0,enum:i.OrderDirection}),s.ApiOkResponse({description:u+" listed successfully."}),n.__param(1,a.Query()),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[String,Object]),n.__metadata("design:returntype",Promise)],A.prototype,"listBy",null),n.__decorate([D(t,"GET","paginateBy/:key/:page"),s.ApiOperation({summary:`Retrieve ${u} records by query.`}),s.ApiParam({name:"key",description:"the model key to sort by"}),s.ApiParam({name:"page",description:"the page to retrieve or the bookmark"}),s.ApiQuery({name:"direction",required:!0,enum:i.OrderDirection,description:"the sort order"}),s.ApiQuery({name:"limit",required:!0,description:"the page size"}),s.ApiQuery({name:"offset",description:"the bookmark when necessary"}),s.ApiOkResponse({description:u+" listed paginated."}),n.__param(0,a.Param("key")),n.__param(1,a.Query()),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[String,Object]),n.__metadata("design:returntype",Promise)],A.prototype,"paginateBy",null),n.__decorate([D(t,"GET","findOneBy/:key"),s.ApiOperation({summary:`Retrieve ${u} records by query.`}),s.ApiParam({name:"key",description:"the model key to sort by"}),s.ApiOkResponse({description:u+" listed found."}),s.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),n.__param(0,a.Param("key")),n.__param(1,a.Param("value")),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[String,Object]),n.__metadata("design:returntype",Promise)],A.prototype,"findOneBy",null),n.__decorate([D(t,"GET","findBy/:key/:value"),s.ApiOperation({summary:`Retrieve ${u} records by query.`}),s.ApiParam({name:"key",description:"the model key to compare"}),s.ApiParam({name:"value",description:"the value to match"}),s.ApiQuery({name:"direction",required:!0,enum:i.OrderDirection,description:"the sort order when applicable"}),s.ApiOkResponse({description:u+" listed found."}),s.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),n.__param(0,a.Param("key")),n.__param(1,a.Param("value")),n.__param(2,a.Query()),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[String,Object,Object]),n.__metadata("design:returntype",Promise)],A.prototype,"findBy",null),n.__decorate([D(t,"GET","statement/:method/*args"),s.ApiOperation({summary:`Executes a prepared statement on ${u}.`}),s.ApiParam({name:"method",description:"the prepared statement to execute"}),s.ApiParam({name:"args",description:"concatenated list of arguments the prepared statement can accept"}),s.ApiQuery({name:"direction",required:!0,enum:i.OrderDirection,description:"the sort order when applicable"}),s.ApiQuery({name:"limit",required:!0,description:"limit or page size when applicable"}),s.ApiQuery({name:"offset",required:!0,description:"offset or bookmark when applicable"}),s.ApiOkResponse({description:u+" listed found."}),s.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),n.__param(0,a.Param("method")),n.__param(1,a.Param("args")),n.__param(2,a.Query()),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[String,Array,Object]),n.__metadata("design:returntype",Promise)],A.prototype,"statement",null),n.__decorate([D(t,"POST","bulk"),s.ApiOperation({summary:`Create a new ${u}.`}),s.ApiBody({description:"Payload for "+u,schema:{type:"array",items:{$ref:s.getSchemaPath(t)}}}),s.ApiCreatedResponse({description:`x ${u} created successfully.`}),s.ApiBadRequestResponse({description:"Payload validation failed."}),s.ApiUnprocessableEntityResponse({description:"Repository rejected the provided payload."}),n.__param(0,T()),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[Array]),n.__metadata("design:returntype",Promise)],A.prototype,"createAll",null),n.__decorate([D(t,"POST"),s.ApiOperation({summary:`Create a new ${u}.`}),s.ApiBody({description:"Payload for "+u,schema:{$ref:s.getSchemaPath(t)}}),s.ApiCreatedResponse({description:u+" created successfully."}),s.ApiBadRequestResponse({description:"Payload validation failed."}),s.ApiUnprocessableEntityResponse({description:"Repository rejected the provided payload."}),n.__param(0,T()),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[Object]),n.__metadata("design:returntype",Promise)],A.prototype,"create",null),n.__decorate([D(t,"GET","bulk"),s.ApiOperation({summary:`Retrieve a ${u} record by id.`}),s.ApiQuery({name:"ids",required:!0,type:"array"}),s.ApiOkResponse({description:u+" retrieved successfully."}),s.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),n.__param(0,a.Query("ids")),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[Array]),n.__metadata("design:returntype",Promise)],A.prototype,"readAll",null),n.__decorate([D(t,"GET",f),v(g),s.ApiOperation({summary:`Retrieve a ${u} record by id.`}),s.ApiOkResponse({description:u+" retrieved successfully."}),s.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),n.__param(0,$(g)),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[Object]),n.__metadata("design:returntype",Promise)],A.prototype,"read",null),n.__decorate([D(t,"PUT","bulk"),v(g),s.ApiOperation({summary:`Replace an existing ${u} record with a new payload.`}),s.ApiBody({description:"Payload for replace a existing record of "+u,schema:{type:"array",items:{$ref:s.getSchemaPath(t)}}}),s.ApiOkResponse({description:t+" record replaced successfully."}),s.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),s.ApiBadRequestResponse({description:"Payload validation failed."}),n.__param(0,T()),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[Array]),n.__metadata("design:returntype",Promise)],A.prototype,"updateAll",null),n.__decorate([D(t,"PUT",f),v(g),s.ApiOperation({summary:`Replace an existing ${u} record with a new payload.`}),s.ApiBody({description:"Payload for replace a existing record of "+u,schema:{$ref:s.getSchemaPath(t)}}),s.ApiOkResponse({description:t+" record replaced successfully."}),s.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),s.ApiBadRequestResponse({description:"Payload validation failed."}),n.__param(0,$(g)),n.__param(1,T()),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[Object,Object]),n.__metadata("design:returntype",Promise)],A.prototype,"update",null),n.__decorate([D(t,"DELETE","bulk"),v(g),s.ApiOperation({summary:`Retrieve a ${u} record by id.`}),s.ApiQuery({name:"ids",required:!0,type:"array"}),s.ApiOkResponse({description:u+" retrieved successfully."}),s.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),n.__param(0,a.Query("ids")),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[Array]),n.__metadata("design:returntype",Promise)],A.prototype,"deleteAll",null),n.__decorate([D(t,"DELETE",f),v(g),s.ApiOperation({summary:`Delete a ${u} record by id.`}),s.ApiOkResponse({description:u+" record deleted successfully."}),s.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),n.__param(0,$(g)),n.__metadata("design:type",Function),n.__metadata("design:paramtypes",[Object]),n.__metadata("design:returntype",Promise)],A.prototype,"delete",null),A=n.__decorate([a.Controller(l),s.ApiTags(u),s.ApiExtraModels(t),k(t),n.__metadata("design:paramtypes",[e.DecafRequestContext])],A),A}static getRouteParametersFromModel(e){const r=o.Model.pk(e),a=t.Metadata.get(e,t.Metadata.key(d.DBKeys.COMPOSED,r)),i=a?.args??[],s=Array.isArray(i)&&i.length>0?Array.from(new Set([...i])):Array.from(new Set([r])),n=t.Metadata.description(e);return{path:":"+s.join("/:"),description:n,apiProperties:s.map(r=>({name:r,description:t.Metadata.description(e,r),required:!0,type:String})),getPK:(...e)=>a?.separator?e.join(a.separator):e.join("")}}}var B,L;e.DecafRequestHandlerInterceptor=class{constructor(e){this.executor=e}async intercept(e,t){const r=e.switchToHttp().getRequest(),a=e.switchToHttp().getResponse();return await this.executor.exec(r,a),t.handle()}},e.DecafRequestHandlerInterceptor=n.__decorate([a.Injectable({scope:a.Scope.REQUEST}),n.__metadata("design:paramtypes",[e.DecafHandlerExecutor])],e.DecafRequestHandlerInterceptor),e.DecafModelModule=class{static{B=this}static{this.log=p.Logging.for(B.name)}static createModelServices(e){return e.map(e=>({provide:e.name+"Service",useFactory:()=>i.ModelService.forModel(e)}))}static forRoot(t,r={}){const a=this.log.for(this.forRoot);a.info("Generating controllers for flavour...");const o=i.Adapter.models(t);let s=[];r.autoServices&&(a.info("Auto-services enabled. Initializing service generation."),s=this.createModelServices(o),a.info(`Auto-services completed. ${s.length} services initialized.`));const n=o.map(N.create);return a.info(`Generated ${n.length} controllers`),{module:B,controllers:n,providers:[{provide:_,useFactory:()=>r.handlers?.map(e=>(a.info("Registered request handler: "+e.name),new e))??[]},e.DecafRequestContext,e.DecafHandlerExecutor,{provide:c.APP_INTERCEPTOR,useClass:e.DecafRequestHandlerInterceptor},...s]}}},e.DecafModelModule=B=n.__decorate([a.Module({})],e.DecafModelModule),e.DecafModule=L=class{static async forRootAsync(t){const{autoControllers:r,autoServices:a,handlers:o}=t,i=(await O.createAdapter(t)).flavour,s=[O.forRoot(t)];return r&&s.push(e.DecafModelModule.forRoot(i,{autoServices:a,handlers:o})),{module:L,imports:s}}},e.DecafModule=L=n.__decorate([a.Module({})],e.DecafModule);class K extends i.ForbiddenError{constructor(e){super(e,K.name)}}e.DecafExceptionFilter=class{catch(e,t){const r=t.switchToHttp(),a=r.getResponse(),o=r.getRequest(),i="production"===p.LoggedEnvironment.env;e instanceof d.BaseError||(e=new d.InternalError(e.message)),a.status(e.code).json({status:e.code,error:i?e.name:e.message,timestamp:(new Date).toISOString(),path:o.url,method:o.method})}},e.DecafExceptionFilter=n.__decorate([a.Catch()],e.DecafExceptionFilter);const H={title:"Swagger | OpenAPI Specification (OAS)",description:"Standardized format for describing RESTful APIs",version:"0.0.1",path:"docs",faviconFilePath:"",topbarIconFilePath:"",auth:{type:"http",scheme:"bearer",bearerFormat:"JWT",name:"Authorization",description:"Enter JWT token",in:"header"},persistAuthorization:!0,topbarBgColor:"#000000"};class U{constructor(e){this.options={...e}}customCSS(){let e="";return this.options.topbarIconPath&&(e+=`.topbar-wrapper { content: url('data:image/png;base64,${this.b64(this.options.topbarIconPath)}'); width: 200px; height: auto; }\n`),e+`\n .topbar-wrapper svg { visibility: hidden; }\n .swagger-ui .topbar { background-color: ${this.options.topbarBgColor||H.topbarBgColor}; }\n `}getCustomOptions(){const e={};return this.options.faviconPath&&(e.customfavIcon=this.b64(this.options.faviconPath,!0)),{customSiteTitle:this.options.title,...e,customCss:this.customCSS(),swaggerOptions:{persistAuthorization:this.options.persistAuthorization},jsonDocumentUrl:this.options.path?this.options.path+"/spec.json":void 0,yamlDocumentUrl:this.options.path?this.options.path+"/spec.yaml":void 0}}b64(e,t=!1){const r=m.join(this.options.assetsPath||"",e),a=l.readFileSync(r,{encoding:"base64"});return t?"data:image/png;base64,"+a:a}}class G{constructor(e,t){this.app=e,this.options=t}createDocument(){const e=this.options.path?this.options.description+""+`<br><br><a href="${this.options.path}/spec.json">OpenAPI JSON Spec</a> | `+`<a href="${this.options.path}/spec.yaml">OpenAPI YAML Spec</a>`:this.options.description,t=(new s.DocumentBuilder).setTitle(this.options.title).setDescription(e).setVersion(this.options.version||"0.0.1").addBearerAuth(this.options.auth||H.auth).build();return s.SwaggerModule.createDocument(this.app,t,{extraModels:this.options.extraModels||[]})}setupSwagger(){const e=this.createDocument(),t=new U({title:this.options.title,path:this.options.path||H.path,persistAuthorization:this.options.persistAuthorization??!0,assetsPath:this.options.assetsPath,faviconPath:this.options.faviconFilePath,topbarIconPath:this.options.topbarIconFilePath,topbarBgColor:this.options.topbarBgColor});s.SwaggerModule.setup(this.options.path||H.path,this.app,e,{...t.getCustomOptions()})}}const Q="##VERSION##",z="##PACKAGE##";t.Metadata.registerLibrary(z,Q),e.AUTH_HANDLER=b,e.AUTH_META_KEY=P,e.ApiOperationFromModel=D,e.ApiParamsFromModel=v,e.Auth=k,e.AuthRole=E,e.BulkApiOperationFromModel=(e,r,o)=>{const i={GET:[d.BulkCrudOperationKeys.READ_ALL,a.Get],POST:[d.BulkCrudOperationKeys.CREATE_ALL,a.Post],PUT:[d.BulkCrudOperationKeys.UPDATE_ALL,a.Put],PATCH:[d.BulkCrudOperationKeys.UPDATE_ALL,a.Patch],DELETE:[d.BulkCrudOperationKeys.DELETE_ALL,a.Delete]},[n,c]=i[r];return R(e,n)?t.apply(s.ApiExcludeEndpoint()):t.apply(c(o))},e.CorsError=K,e.DECAF_ADAPTER_ID=g,e.DECAF_ADAPTER_OPTIONS=A,e.DECAF_HANDLERS=_,e.DECAF_MODULE_OPTIONS=y,e.DECAF_ROUTE=f,e.DecafBody=T,e.DecafParams=$,e.FromModelController=N,e.HttpVerbToDecorator=I,e.NestBootstraper=class{static get logger(){return this._logger||(this._logger=new a.Logger("NestBootstrap")),this._logger}static initialize(e){return this.app=e,this}static enableLogger(e){return this._logger=e||new a.Logger("NestBootstrap"),this.app.useLogger(this._logger),this}static enableCors(e=[],t=["GET","POST","PUT","DELETE"]){const r="*"===e?"*":e.map(e=>e.trim().toLowerCase()),a={origin:(e,t)=>e?"*"===r||Array.isArray(r)&&r.includes(e.toLowerCase())?t(null,!0):void t(new K(`Origin ${e} not allowed`)):t(null,!0),credentials:!0,methods:t.join(",")};return this.app.enableCors(a),this}static useHelmet(e){try{const t=require("helmet");this.app.use(t(e)),this.logger.log("Helmet middleware enabled successfully.")}catch(e){this.logger.warn("Helmet not installed. Skipping middleware.")}return this}static setupSwagger(e){return new G(this.app,{title:e.title,description:e.description,version:e.version,path:e.path||"api",persistAuthorization:e.persistAuthorization??!0,assetsPath:e.assetsPath,faviconFilePath:e.faviconPath,topbarIconFilePath:e.topbarIconPath,topbarBgColor:e.topbarBgColor}).setupSwagger(),this}static useGlobalPipes(...e){return e.length>0&&this.app.useGlobalPipes(...e),this}static useGlobalFilters(...t){return this.app.useGlobalFilters(...t.length>0?t:[new e.DecafExceptionFilter]),this}static useGlobalInterceptors(...e){return e.length>0&&this.app.useGlobalInterceptors(...e),this}static async start(e=Number(process.env.PORT)||3e3,t=void 0,r=!0){this.app.listen(e,t).then(async()=>{if(r){const e=await this.app.getUrl();this.logger.log("\ud83d\ude80 Application is running at: "+e)}})}},e.PACKAGE_NAME=z,e.Roles=e=>t.metadata(E,e),e.SwaggerBuilder=G,e.UseDecafFilter=()=>a.UseFilters(new e.DecafExceptionFilter),e.VERSION=Q,e.isOperationBlocked=R,e.repoForModel=e=>{const t=o.Model.get(e);if(!t)throw new d.InternalError("Failed to find repository for "+e);return i.Repository.forModel(t)},e.route=(e,r)=>{const a=f;return t.Decoration.for(a).define({decorator:()=>(o,i,s)=>{const n={path:r,httpMethod:e,handler:s};return t.apply(t.methodMetadata(t.Metadata.key(a,i),n))(o,i,s)},args:[]}).apply()}},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@decaf-ts/decoration"),require("@decaf-ts/injectable-decorators"),require("@nestjs/common"),require("@decaf-ts/decorator-validation"),require("@decaf-ts/core"),require("@nestjs/swagger"),require("tslib"),require("@nestjs/core"),require("@decaf-ts/logging"),require("@decaf-ts/db-decorators"),require("fs"),require("path")):"function"==typeof define&&define.amd?define(["exports","@decaf-ts/decoration","@decaf-ts/injectable-decorators","@nestjs/common","@decaf-ts/decorator-validation","@decaf-ts/core","@nestjs/swagger","tslib","@nestjs/core","@decaf-ts/logging","@decaf-ts/db-decorators","fs","path"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["for-nest"]={},e.decafTsDecoration,e.decafTsInjectableDecorators,e.nestjsCommon,e.decafTsDecoratorValidation,e.decafTsCore,e.nestjsSwagger,e.tslib,e.nestjsCore,e.decafTsLogging,e.decafTsDbDecorators,e.fs,e.path);
1
+ var e,t;e=this,t=function(e,t,r,a,o,i,s,n,c,p,d,l,u,h){"use strict";function m(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(r=>{if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:()=>e[r]})}}),t.default=e,Object.freeze(t)}var y=m(h);const f="swagger",g={API_OPERATION:f+"/apiOperation",API_RESPONSE:f+"/apiResponse",API_PRODUCES:f+"/apiProduces",API_CONSUMES:f+"/apiConsumes",API_TAGS:f+"/apiUseTags",API_CALLBACKS:f+"/apiCallbacks",API_PARAMETERS:f+"/apiParameters",API_HEADERS:f+"/apiHeaders",API_MODEL_PROPERTIES:f+"/apiModelProperties",API_MODEL_PROPERTIES_ARRAY:f+"/apiModelPropertiesArray",API_SECURITY:f+"/apiSecurity",API_EXCLUDE_ENDPOINT:f+"/apiExcludeEndpoint",API_EXCLUDE_CONTROLLER:f+"/apiExcludeController",API_EXTRA_MODELS:f+"/apiExtraModels",API_EXTENSION:f+"/apiExtension",API_SCHEMA:f+"/apiSchema",API_DEFAULT_GETTER:f+"/apiDefaultGetter",API_LINK:f+"/apiLink"},_=e=>void 0===e;function A(e){if("function"==typeof e)return A(e());if(Array.isArray(e))return e;if("object"!=typeof e)return[];const t=Object.values(e).filter(e=>"number"==typeof e).map(e=>e.toString());return Object.keys(e).filter(e=>!t.includes(e)).map(t=>e[t])}function E(e){return e.filter(s.isString).length>0?"string":"number"}function P(e,t,r=!0){return(a,o)=>{const i=Reflect.getMetadata(g.API_MODEL_PROPERTIES_ARRAY,a)||[],n=":"+o;i.includes(n)||Reflect.defineMetadata(g.API_MODEL_PROPERTIES_ARRAY,[...i,":"+o],a);const c=Reflect.getMetadata(e,a,o);if(c){const i=s.pickBy(t,s.negate(_)),n=r?{...c,...i}:{...i,...c};Reflect.defineMetadata(e,n,a,o)}else{const r=a?.constructor?._OPENAPI_METADATA_FACTORY?.()[o]?.type??Reflect.getMetadata("design:type",a,o);Reflect.defineMetadata(e,{type:r,...s.pickBy(t,s.negate(_))},a,o)}}}function b(e={}){return O(e)}function O(e={},t=!0){const[r,a]=((e,t)=>{if(!e)return[e,t];if(t)return[e,t];const r=s.isArray(e);return[r?e[0]:e,r]})(e.type,e.isArray);if((o=e={...e,type:r,isArray:a}).isArray&&"enum"in o&&void 0!==o.enum){e.type="array";const t=A(e.enum);e.items={type:E(t),enum:t},delete e.enum}else if("enum"in e&&void 0!==e.enum){const t=A(e.enum);e.enum=t,e.type=E(t)}var o;return Array.isArray(e.type)&&(e.type="array",e.items={type:"array",items:{type:e.type[0]}}),P(g.API_MODEL_PROPERTIES,e,t)}function R(e,r){const{handler:a,args:o}=t.Metadata.get(e,c.OperationKeys.REFLECT+c.OperationKeys.BLOCK)||{};return!!a&&(a(...o,r)??!1)}function w(e,r,o){const i={GET:[c.OperationKeys.READ,a.Get],POST:[c.OperationKeys.CREATE,a.Post],PUT:[c.OperationKeys.UPDATE,a.Put],PATCH:[c.OperationKeys.UPDATE,a.Patch],DELETE:[c.OperationKeys.DELETE,a.Delete]},[s,p]=i[r];return R(e,s)?t.apply(n.ApiExcludeEndpoint()):t.apply(p(o))}function D(e=[]){const t=e.map(e=>n.ApiParam({name:e.name,description:e.description??"Path parameter: "+e.name,required:e.required??!0,type:e.type??String}));return a.applyDecorators(...t)}t.Decoration.for(r.InjectablesKeys.INJECTABLE).extend({decorator:(e,t)=>(t=t||("object"==typeof e?Object.assign(e,r.DefaultInjectablesConfig):r.DefaultInjectablesConfig),a.Injectable({scope:t.singleton?a.Scope.DEFAULT:a.Scope.REQUEST,durable:!t.singleton||void 0}))}).apply(),t.Decoration.for(r.InjectablesKeys.INJECT).extend({decorator:(e,t)=>(t,r,o)=>a.Inject(e||t)(t,r,o)}).apply(),t.Decoration.for(o.ValidationKeys.REQUIRED).extend(b({required:!0})).apply(),t.Decoration.for(o.ValidationKeys.MAX).extend({decorator:e=>b({maximum:e})}).apply(),t.Decoration.for(o.ValidationKeys.MIN).extend({decorator:e=>b({minimum:e})}).apply(),t.Decoration.for(o.ValidationKeys.MAX_LENGTH).extend({decorator:e=>b({maxLength:e})}).apply(),t.Decoration.for(o.ValidationKeys.MIN_LENGTH).extend({decorator:e=>b({minLength:e})}).apply(),t.Decoration.for(o.ValidationKeys.TYPE).extend({decorator:e=>(t,r)=>("function"!=typeof(e=Array.isArray(e)?e[0]:e)||e.name||(e=e()),b({type:e})(t,r))}).apply(),t.Decoration.for(o.ValidationKeys.DATE).extend({decorator:e=>b({type:String,format:"date-time"})}).apply(),t.Decoration.for(o.ValidationKeys.ENUM).extend({decorator:e=>b({enum:Array.isArray(e)?e:Object.values(e)})}).apply(),t.Decoration.for(o.ValidationKeys.PATTERN).extend({decorator:e=>b({pattern:"string"==typeof e?e:e.source})}).apply(),t.Decoration.for(i.PersistenceKeys.COLUMN).extend({decorator:e=>b({name:e})}).apply(),t.Decoration.for(t.DecorationKeys.DESCRIPTION).extend({decorator:e=>b({description:e})}).apply();const T=a.createParamDecorator((e,t)=>{const r=t.switchToHttp().getRequest().body,o=t.getClass(),i=o.class;if(!i)throw new a.InternalServerErrorException(`ModelConstructor not found on controller ${o.name}. Ensure the controller was created via FromModelController.`);return r?Array.isArray(r)?r.map(e=>new i(e)):new i(r):r}),v=a.createParamDecorator((e,t)=>{const r=t.switchToHttp().getRequest(),a=r?.params??{},o=e??Object.keys(a),i=o.map(e=>a[e]);return{raw:a,valuesInOrder:i,keysInOrder:o}});function S(e=[]){const t=e.map(e=>e.name);return v(t)}const C=a.createParamDecorator((e,t)=>{const r={...t.switchToHttp().getRequest().query??{}};if(void 0!==r.limit){const e=Number(r.limit);Number.isNaN(e)||(r.limit=e)}if(void 0!==r.offset){const e=Number(r.offset);Number.isNaN(e)||(r.offset=e)}if(void 0!==r.bookmark){const e=Number(r.bookmark);r.bookmark=Number.isNaN(e)?r.bookmark:e}return r});function x(e){const t={GET:a.Get,POST:a.Post,PUT:a.Put,PATCH:a.Patch,DELETE:a.Delete}[e];if(!t)throw Error(`Unsupported HTTP verb "${e}". No NestJS decorator mapping was found.`);return t}const I="DecafModuleOptions",M="DecafAdapter",k="DecafRoute",$=Symbol("DecafHandlers"),F=Symbol("DecafAdapterForOptions"),N=Symbol("AUTH_HANDLER"),L="auth:meta",j="AuthRole",q=Symbol("decaf:context");function B(t){const r="string"==typeof t?t:t.name;return a.applyDecorators(a.SetMetadata(L,r),a.UseInterceptors(e.AuthInterceptor))}e.AuthInterceptor=class{constructor(e,t){this.reflector=e,this.authHandler=t}async intercept(e,t){const r=this.reflector.get(L,e.getHandler())??this.reflector.get(L,e.getClass());return r&&this.authHandler&&await this.authHandler.authorize(e,r),t.handle()}},e.AuthInterceptor=p.__decorate([a.Injectable(),p.__param(1,a.Optional()),p.__param(1,a.Inject(N)),p.__metadata("design:paramtypes",[d.Reflector,Object])],e.AuthInterceptor);class K{parseRequest(e){const t=e.headers.authorization?.split(" ")[1];return t}async authorize(e,r){const a=e.switchToHttp().getRequest(),s=this.parseRequest(a);if(!s)throw new i.AuthorizationError("Unauthenticated");if(!t.Metadata.get(o.Model.get(r),j).includes(s))throw new i.AuthorizationError("Missing role: "+s)}}e.DecafRequestContext=class{applyCtx(e){this._ctx=e}get ctx(){if(!this._ctx)throw new c.InternalError("Context not initialized for request");return this._ctx}},e.DecafRequestContext=p.__decorate([a.Injectable({scope:a.Scope.REQUEST})],e.DecafRequestContext),e.DecafHandlerExecutor=class{constructor(e,t){this.handlers=e,this.context=t}async exec(e,t){for(const r of this.handlers)await r.handle(this.context.ctx,e,t)}},e.DecafHandlerExecutor=p.__decorate([a.Injectable({scope:a.Scope.REQUEST}),p.__param(0,a.Inject($)),p.__metadata("design:paramtypes",[Array,e.DecafRequestContext])],e.DecafHandlerExecutor);class U{}function H(e){return r=>(t.Metadata.set("transformers",e,r),"function"==typeof r?t.metadata("transformers",e)(r):r)}e.RamTransformer=class{async from(e){const t=e.headers.authorization?e.headers.authorization.split(" ")[1]:void 0;return t?{UUID:t}:{}}},e.RamTransformer=p.__decorate([H("ram")],e.RamTransformer);const G=e=>({name:e,description:e+" parameter for the query",required:!0,type:String});function z(e,t,r,o=!1){const s=x(r),c=(e=>e.split("/").filter(e=>e.startsWith(":")).map(e=>e.slice(1)))(t).map(G),p=[];return"GET"===r&&o&&p.push(n.ApiQuery({name:"direction",required:!1,enum:i.OrderDirection,description:"the sort order when applicable"}),n.ApiQuery({name:"limit",required:!1,description:"limit or page size when applicable"}),n.ApiQuery({name:"offset",required:!1,description:"offset or bookmark when applicable"})),{method:[s(t),...c.map(n.ApiParam),...p,n.ApiOperation({summary:`Retrieve records using according to "${e}".`}),n.ApiOkResponse({description:"Result successfully retrieved."}),n.ApiNoContentResponse({description:"No content returned by the method."})],params:[S(c),a.Query()]}}function Q(e,t,r,a){const o=e?.prototype??e;a.method.forEach(e=>e(o,t,r)),a.params?.forEach((e,r)=>e(o,t,r))}function V(e){return async function(t,r){const a=this.log.for(e);try{a.debug(`Invoking persistence method "${e}" given parameters: ${JSON.stringify(t.valuesInOrder)}`);const{direction:o,limit:s,offset:n}=r;return await((e,t,...r)=>{if(e instanceof i.ModelService)return"function"==typeof e[t]?e[t](...r):e.statement(t,...r);if("function"==typeof e[t])return e[t](...r);throw Error(`Persistence method "${t}" not found on ${e?.constructor?.name}`)})(this.persistence(),e,...t.valuesInOrder,o,s,n)}catch(t){throw a.error(`Custom query "${e}" failed`,t),t}}}function Y(e,t,r){return Object.defineProperty(e.prototype||e,t,{value:r,writable:!1}),Object.getOwnPropertyDescriptor(e.prototype||e,t)}class J extends i.Service{constructor(e,t){super(t),this.clientContext=e}logCtx(e,t,r=!1,a){const o=this.clientContext.ctx;return e=e.filter(e=>void 0!==e),i.ContextualLoggedClass.logCtx.call(this,t,a||{},r,...e,o)}}class X extends J{persistence(e){if(!this._persistence)try{this._persistence=i.ModelService.getService(this.class)}catch(e){this._persistence=i.Repository.forModel(this.class)}return e?this._persistence instanceof i.Repository?this._persistence.override(e.toOverrides()):this._persistence.for(e.toOverrides()):this._persistence}constructor(e,t){super(e,t)}logCtx(e,t,r=!1){const a=this.clientContext.ctx;let o={};try{o=a.get("overrides")}catch(e){}const s=this.persistence(a);let n,c;return s instanceof i.ModelService?n=s.repo.adapter:s instanceof i.Repository?n=s.adapter:s.context&&(n=s),r?n.logCtx(e,t,!0,o).then(e=>e):(c=n.logCtx(e,t,!1,o),c)}}function W(e,r){if(!i.TransactionOperationKeys.includes(e))return r;const a=[c.OperationKeys.UPDATE,c.BulkCrudOperationKeys.UPDATE_ALL].includes(e),s=t.Metadata.properties(r)||[],p=o.Model.relations(r)||[];let d=s.filter(e=>o.Model.generated(r,e));a&&(d=d.filter(e=>e!==o.Model.pk(r)));class u extends(n.OmitType(r,d)){}function h(e,t,r){r||(Object.defineProperty(u.prototype,e,{value:r?[t]:t,writable:!0,enumerable:!0,configurable:!0}),Reflect.defineMetadata("design:type",t,u.prototype,e))}Object.defineProperty(u,"name",{value:`${l.toPascalCase(r.name)}${l.toPascalCase(e)}DTO`});for(const a of p){let i=t.Metadata.allowedTypes(r,a);if(i=i?Array.isArray(i)?i[0]:i:void 0,i="function"!=typeof i||i.name?i:i(),!i)throw new c.InternalError(`Type for relation ${a} not found`);if(o.Model.get(i.name)){const s=t.Metadata.validationFor(r,a);h(a,W(e,i),!!s[o.ValidationKeys.LIST])}}return u}class Z{static{this.log=l.Logging.for(Z.name)}static getPersistence(e){try{return i.ModelService.getService(e)}catch(t){return i.Repository.forModel(e)}}static createQueryRoutesFromRepository(e,r=i.PersistenceKeys.QUERY){const a=Z.log.for(Z.createQueryRoutesFromRepository),o=e instanceof i.ModelService?e.repo:e,s=o.class,n=t.Metadata.get(o.constructor,t.Metadata.key(i.PersistenceKeys.QUERY))??{},c=t.Metadata.get(e.constructor,t.Metadata.key(k))??{};class p extends X{get class(){throw Error("Method not implemented.")}constructor(e,t){super(e,t)}}for(const[e,t]of Object.entries(c)){const r=[t.path.replace(/^\/+|\/+$/g,"")].filter(e=>e&&e.trim()).join("/"),o=V(e);if(!o){const t=`Invalid or missing handler for model ${s.name} on decorated method ${e}`;throw a.error(t),Error(t)}const i=Y(p,e,o);i&&Q(p,e,i,z(e,r,t.httpMethod))}for(const[e,t]of Object.entries(n)){const a=[r,e,...(t.fields??[]).map(e=>":"+e)].filter(e=>e&&e.trim()).join("/"),o=Y(p,e,V(e));o&&Q(p,e,o,z(e,a,"GET",!0))}return p}static create(t){const r=Z.log.for(Z.create),s=o.Model.tableName(t),d=l.toKebabCase(s),u=t.name,h=Z.getPersistence(t),{description:m,getPK:y,apiProperties:f,path:g}=Z.getRouteParametersFromModel(t);r.debug("Creating controller for model: "+u);const _=Z.createQueryRoutesFromRepository(h);let A=class extends _{static get class(){return t}get class(){return t}constructor(e){super(e),this.pk=o.Model.pk(t),r.info(`Registering dynamic controller for model: ${this.class.name} route: /${d}`)}async listBy(e,t){const{ctx:r}=(await this.logCtx([],i.PreparedStatementKeys.LIST_BY,!0)).for(this.listBy);return this.persistence(r).listBy(e,t.direction,r)}async paginateBy(e,t){const{ctx:r}=(await this.logCtx([],i.PreparedStatementKeys.PAGE_BY,!0)).for(this.paginateBy);return this.persistence(r).paginateBy(e,t.direction,t,r)}async findOneBy(e,t){const{ctx:r}=(await this.logCtx([],i.PreparedStatementKeys.FIND_ONE_BY,!0)).for(this.findOneBy);return this.persistence(r).findOneBy(e,t,r)}async findBy(e,t,r){const{ctx:a}=(await this.logCtx([],i.PreparedStatementKeys.FIND_BY,!0)).for(this.findBy);return this.persistence(a).for(a.toOverrides()).findBy(e,t,a)}async statement(e,t,r){const{ctx:a}=(await this.logCtx([],i.PersistenceKeys.STATEMENT,!0)).for(this.statement),{direction:o,offset:s,limit:n,bookmark:c}=r;switch(t=t.map(e=>("string"==typeof e?parseInt(e):e)||e),e){case i.PreparedStatementKeys.FIND_BY:break;case i.PreparedStatementKeys.LIST_BY:t.push(o);break;case i.PreparedStatementKeys.PAGE_BY:t=[t[0],o,{limit:n,offset:s,bookmark:c}];case i.PreparedStatementKeys.FIND_ONE_BY:}return this.persistence(a).statement(e,...t,a)}async createAll(e){const{ctx:r,log:a}=(await this.logCtx([],c.BulkCrudOperationKeys.CREATE_ALL,!0)).for(this.createAll);let o;a.verbose("creating new "+u);try{o=await this.persistence(r).createAll(e.map(e=>new t(e)),r)}catch(e){throw a.error("Failed to create new "+u,e),e}return a.info(`created new ${u} with id ${o[this.pk]}`),o}async create(e){const{ctx:t,log:r}=(await this.logCtx([],c.OperationKeys.CREATE,!0)).for(this.create);let a;r.verbose("creating new "+u);try{a=await this.persistence(t).create(e,t)}catch(e){throw r.error("Failed to create new "+u,e),e}return r.info(`created new ${u} with id ${a[this.pk]}`),a}async readAll(e){const{ctx:t,log:r}=(await this.logCtx([],c.BulkCrudOperationKeys.READ_ALL,!0)).for(this.readAll);let a;try{r.debug(`reading ${e.length} ${u}: ${e}`),a=await this.persistence(t).readAll(e,t)}catch(t){throw r.error(`Failed to ${u} with id ${e}`,t),t}return r.info(`read ${a.length} ${u}`),a}async read(e){const{ctx:t,log:r}=(await this.logCtx([],c.OperationKeys.READ,!0)).for(this.read),a=y(...e.valuesInOrder);if(void 0===a)throw new c.ValidationError(`No ${this.pk} provided`);let o;try{r.debug(`reading ${u} with ${this.pk} ${a}`),o=await this.persistence(t).read(a,t)}catch(e){throw r.error(`Failed to read ${u} with id ${a}`,e),e}return r.info(`read ${u} with id ${o[this.pk]}`),o}async updateAll(e){const{ctx:t,log:r}=(await this.logCtx([],c.BulkCrudOperationKeys.UPDATE_ALL,!0)).for(this.updateAll);let a;try{r.info(`updating ${e.length} ${u}`);const o=e.map(e=>JSON.parse(JSON.stringify(e)));a=await this.persistence(t).updateAll(o,t)}catch(e){throw r.error(e),e}return a}async update(e,r){const{ctx:a,log:o}=(await this.logCtx([],c.OperationKeys.UPDATE,!0)).for(this.update),i=y(...e.valuesInOrder);if(void 0===i)throw new c.ValidationError(`No ${this.pk} provided`);let s;try{o.info(`updating ${u} with ${this.pk} ${i}`);const e=JSON.parse(JSON.stringify(r));s=await this.persistence(a).update(new t({...e,[this.pk]:i}),a)}catch(e){throw o.error(e),e}return s}async deleteAll(e){const{ctx:t,log:r}=(await this.logCtx([],c.BulkCrudOperationKeys.DELETE_ALL,!0)).for(this.deleteAll);let a;try{r.debug(`deleting ${e.length} ${u}: ${e}`),a=await this.persistence(t).deleteAll(e,t)}catch(t){throw r.error(`Failed to delete ${u} with id ${e}`,t),t}return r.info(`deleted ${a.length} ${u}`),a}async delete(e){const{ctx:t,log:r}=(await this.logCtx([],c.OperationKeys.DELETE,!0)).for(this.delete),a=y(...e.valuesInOrder);if(void 0===a)throw new c.ValidationError(`No ${this.pk} provided`);let o;try{r.debug(`deleting ${u} with ${this.pk} ${a}`),o=await this.persistence(t).delete(a,t)}catch(e){throw r.error(`Failed to delete ${u} with id ${a}`,e),e}return r.info(`deleted ${u} with id ${a}`),o}};return p.__decorate([w(t,"GET","listBy/:key"),n.ApiOperation({summary:`Retrieve ${u} records by query.`}),n.ApiParam({name:"key",description:"the model key to sort by"}),n.ApiQuery({name:"direction",required:!0,enum:i.OrderDirection}),n.ApiOkResponse({description:u+" listed successfully."}),p.__param(1,C()),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[String,Object]),p.__metadata("design:returntype",Promise)],A.prototype,"listBy",null),p.__decorate([w(t,"GET","paginateBy/:key/:page"),n.ApiOperation({summary:`Retrieve ${u} records by query.`}),n.ApiParam({name:"key",description:"the model key to sort by"}),n.ApiParam({name:"page",description:"the page to retrieve or the bookmark"}),n.ApiQuery({name:"direction",required:!0,enum:i.OrderDirection,description:"the sort order"}),n.ApiQuery({name:"limit",required:!0,description:"the page size"}),n.ApiQuery({name:"offset",description:"the bookmark when necessary"}),n.ApiOkResponse({description:u+" listed paginated."}),p.__param(0,a.Param("key")),p.__param(1,C()),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[String,Object]),p.__metadata("design:returntype",Promise)],A.prototype,"paginateBy",null),p.__decorate([w(t,"GET","findOneBy/:key"),n.ApiOperation({summary:`Retrieve ${u} records by query.`}),n.ApiParam({name:"key",description:"the model key to sort by"}),n.ApiOkResponse({description:u+" listed found."}),n.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),p.__param(0,a.Param("key")),p.__param(1,a.Param("value")),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[String,Object]),p.__metadata("design:returntype",Promise)],A.prototype,"findOneBy",null),p.__decorate([w(t,"GET","findBy/:key/:value"),n.ApiOperation({summary:`Retrieve ${u} records by query.`}),n.ApiParam({name:"key",description:"the model key to compare"}),n.ApiParam({name:"value",description:"the value to match"}),n.ApiQuery({name:"direction",required:!0,enum:i.OrderDirection,description:"the sort order when applicable"}),n.ApiOkResponse({description:u+" listed found."}),n.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),p.__param(0,a.Param("key")),p.__param(1,a.Param("value")),p.__param(2,C()),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[String,Object,Object]),p.__metadata("design:returntype",Promise)],A.prototype,"findBy",null),p.__decorate([w(t,"GET","statement/:method/*args"),n.ApiOperation({summary:`Executes a prepared statement on ${u}.`}),n.ApiParam({name:"method",description:"the prepared statement to execute"}),n.ApiParam({name:"args",description:"concatenated list of arguments the prepared statement can accept"}),n.ApiQuery({name:"direction",required:!0,enum:i.OrderDirection,description:"the sort order when applicable"}),n.ApiQuery({name:"limit",required:!0,description:"limit or page size when applicable"}),n.ApiQuery({name:"offset",required:!0,description:"offset or bookmark when applicable"}),n.ApiOkResponse({description:u+" listed found."}),n.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),p.__param(0,a.Param("method")),p.__param(1,a.Param("args")),p.__param(2,C()),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[String,Array,Object]),p.__metadata("design:returntype",Promise)],A.prototype,"statement",null),p.__decorate([w(t,"POST","bulk"),n.ApiOperation({summary:`Create a new ${u}.`}),n.ApiBody({description:"Payload for "+u,schema:{type:"array",items:{$ref:n.getSchemaPath(t)}}}),n.ApiCreatedResponse({description:u+" created successfully.",schema:{type:"array",items:{$ref:n.getSchemaPath(t)}}}),n.ApiBadRequestResponse({description:"Payload validation failed."}),n.ApiUnprocessableEntityResponse({description:"Repository rejected the provided payload."}),p.__param(0,T()),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Array]),p.__metadata("design:returntype",Promise)],A.prototype,"createAll",null),p.__decorate([w(t,"POST"),n.ApiOperation({summary:`Create a new ${u}.`}),n.ApiBody({description:"Payload for "+u,type:W(c.OperationKeys.CREATE,t)}),n.ApiCreatedResponse({description:u+" created successfully.",schema:{$ref:n.getSchemaPath(t)}}),n.ApiBadRequestResponse({description:"Payload validation failed."}),n.ApiUnprocessableEntityResponse({description:"Repository rejected the provided payload."}),p.__param(0,T()),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Object]),p.__metadata("design:returntype",Promise)],A.prototype,"create",null),p.__decorate([w(t,"GET","bulk"),n.ApiOperation({summary:`Retrieve a ${u} record by id.`}),n.ApiQuery({name:"ids",required:!0,type:"array"}),n.ApiOkResponse({description:u+" retrieved successfully.",schema:{type:"array",items:{$ref:n.getSchemaPath(t)}}}),n.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),p.__param(0,a.Query("ids")),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Array]),p.__metadata("design:returntype",Promise)],A.prototype,"readAll",null),p.__decorate([w(t,"GET",g),D(f),n.ApiOperation({summary:`Retrieve a ${u} record by id.`}),n.ApiOkResponse({description:u+" retrieved successfully.",schema:{$ref:n.getSchemaPath(t)}}),n.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),p.__param(0,S(f)),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Object]),p.__metadata("design:returntype",Promise)],A.prototype,"read",null),p.__decorate([w(t,"PUT","bulk"),D(f),n.ApiOperation({summary:`Replace an existing ${u} record with a new payload.`}),n.ApiBody({description:"Payload for replace a existing record of "+u,schema:{type:"array",items:{$ref:n.getSchemaPath(t)}}}),n.ApiCreatedResponse({description:u+" updated successfully.",schema:{type:"array",items:{$ref:n.getSchemaPath(t)}}}),n.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),n.ApiBadRequestResponse({description:"Payload validation failed."}),p.__param(0,T()),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Array]),p.__metadata("design:returntype",Promise)],A.prototype,"updateAll",null),p.__decorate([w(t,"PUT",g),D(f),n.ApiOperation({summary:`Replace an existing ${u} record with a new payload.`}),n.ApiBody({description:"Payload for replace a existing record of "+u,schema:{$ref:n.getSchemaPath(t)}}),n.ApiOkResponse({description:u+" updated successfully."}),n.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),n.ApiBadRequestResponse({description:"Payload validation failed."}),p.__param(0,S(f)),p.__param(1,T()),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Object,Object]),p.__metadata("design:returntype",Promise)],A.prototype,"update",null),p.__decorate([w(t,"DELETE","bulk"),D(f),n.ApiOperation({summary:`Retrieve a ${u} record by id.`}),n.ApiQuery({name:"ids",required:!0,type:"array"}),n.ApiOkResponse({description:u+" retrieved successfully."}),n.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),p.__param(0,a.Query("ids")),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Array]),p.__metadata("design:returntype",Promise)],A.prototype,"deleteAll",null),p.__decorate([w(t,"DELETE",g),D(f),n.ApiOperation({summary:`Delete a ${u} record by id.`}),n.ApiOkResponse({description:u+" record deleted successfully."}),n.ApiNotFoundResponse({description:`No ${u} record matches the provided identifier.`}),p.__param(0,S(f)),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Object]),p.__metadata("design:returntype",Promise)],A.prototype,"delete",null),A=p.__decorate([a.Controller(d),n.ApiTags(u),n.ApiExtraModels(t),B(t),p.__metadata("design:paramtypes",[e.DecafRequestContext])],A),A}static getRouteParametersFromModel(e){const r=o.Model.pk(e),a=t.Metadata.get(e,t.Metadata.key(c.DBKeys.COMPOSED,r)),i=a?.args??[],s=Array.isArray(i)&&i.length>0?Array.from(new Set([...i])):Array.from(new Set([r])),n=t.Metadata.description(e);return{path:":"+s.join("/:"),description:n,apiProperties:s.map(r=>({name:r,description:t.Metadata.description(e,r),required:!0,type:String})),getPK:(...e)=>a?.separator?e.join(a.separator):e.join("")}}}function ee(t){var r;let o=class{static{r=this}static{this.log=l.Logging.for(r.name).for(t)}static createModelServices(e){return e.map(e=>({provide:e.name+"Service",useFactory:()=>i.ModelService.forModel(e)}))}static forRoot(t,a={}){const o=this.log.for(this.forRoot);o.info("Generating controllers for flavour...");const s=i.Adapter.models(t);let n=[];a.autoServices&&(o.info("Auto-services enabled. Initializing service generation."),n=this.createModelServices(s),o.info(`Auto-services completed. ${n.length} services initialized.`));const c=s.map(Z.create);return o.info(`Generated ${c.length} controllers`),{module:r,controllers:c,providers:[{provide:$,useFactory:()=>a.handlers?.map(e=>(o.info("Registered request handler: "+e.name),new e))??[]},e.DecafRequestContext,e.DecafHandlerExecutor,{provide:d.APP_INTERCEPTOR,useClass:e.DecafRequestHandlerInterceptor},...n]}}};return o=r=p.__decorate([a.Module({})],o),Object.assign(o,"name",{value:"DecafModule"+t}),o}i.Adapter.transformerFor=(e=>{const r="string"==typeof e?e:e.alias;return t.Metadata.innerGet(Symbol.for("transformers"),r)}).bind(i.Adapter),i.Adapter.flavoursToTransform=(()=>{const e=t.Metadata.innerGet(Symbol.for("transformers"));if(e)return Object.keys(e)}).bind(i.Adapter),e.DecafRequestHandlerInterceptor=class{constructor(e,t){this.requestContext=e,this.executor=t}async contextualize(e){const t={headers:e.headers,overrides:{}},r=i.Adapter.flavoursToTransform();if(r)for(const a of r)try{const r=i.Adapter.transformerFor(a),o=await r.from(e);Object.assign(t.overrides,o)}catch(e){throw new c.InternalError("Failed to contextualize request: "+e)}return(new i.Context).accumulate(Object.assign({},i.DefaultAdapterFlags,{logger:l.Logging.get(),timestamp:new Date},t))}async intercept(e,t){const r=e.switchToHttp().getRequest(),a=e.switchToHttp().getResponse(),o=await this.contextualize(r);return this.requestContext.applyCtx(o),await this.executor.exec(r,a),t.handle()}},e.DecafRequestHandlerInterceptor=p.__decorate([a.Injectable({scope:a.Scope.REQUEST}),p.__metadata("design:paramtypes",[e.DecafRequestContext,e.DecafHandlerExecutor])],e.DecafRequestHandlerInterceptor);class te extends i.ForbiddenError{constructor(e){super(e,te.name)}}e.DecafExceptionFilter=class{catch(e,t){const r=t.switchToHttp(),a=r.getResponse(),o=r.getRequest(),i="production"===l.LoggedEnvironment.env;e instanceof c.BaseError||(e=new c.InternalError(e.message)),a.status(e.code).json({status:e.code,error:i?e.name:e.message,timestamp:(new Date).toISOString(),path:o.url,method:o.method})}},e.DecafExceptionFilter=p.__decorate([a.Catch()],e.DecafExceptionFilter);const re={title:"Swagger | OpenAPI Specification (OAS)",description:"Standardized format for describing RESTful APIs",version:"0.0.1",path:"docs",faviconFilePath:"",topbarIconFilePath:"",auth:{type:"http",scheme:"bearer",bearerFormat:"JWT",name:"Authorization",description:"Enter JWT token",in:"header"},persistAuthorization:!0,topbarBgColor:"#000000"};class ae{constructor(e){this.options={...e}}customCSS(){let e="";return this.options.topbarIconPath&&(e+=`.topbar-wrapper { content: url('data:image/png;base64,${this.b64(this.options.topbarIconPath)}'); width: 200px; height: auto; }\n`),e+`\n .topbar-wrapper svg { visibility: hidden; }\n .swagger-ui .topbar { background-color: ${this.options.topbarBgColor||re.topbarBgColor}; }\n `}getCustomOptions(){const e={};return this.options.faviconPath&&(e.customfavIcon=this.b64(this.options.faviconPath,!0)),{customSiteTitle:this.options.title,...e,customCss:this.customCSS(),swaggerOptions:{persistAuthorization:this.options.persistAuthorization},jsonDocumentUrl:this.options.path?this.options.path+"/spec.json":void 0,yamlDocumentUrl:this.options.path?this.options.path+"/spec.yaml":void 0}}b64(e,t=!1){const r=y.join(this.options.assetsPath||"",e),a=u.readFileSync(r,{encoding:"base64"});return t?"data:image/png;base64,"+a:a}}class oe{constructor(e,t){this.app=e,this.options=t}createDocument(){const e=this.options.path?this.options.description+""+`<br><br><a href="${this.options.path}/spec.json">OpenAPI JSON Spec</a> | `+`<a href="${this.options.path}/spec.yaml">OpenAPI YAML Spec</a>`:this.options.description,t=(new n.DocumentBuilder).setTitle(this.options.title).setDescription(e).setVersion(this.options.version||"0.0.1").addBearerAuth(this.options.auth||re.auth).build();return n.SwaggerModule.createDocument(this.app,t,{extraModels:this.options.extraModels||[]})}setupSwagger(){const e=this.createDocument(),t=new ae({title:this.options.title,path:this.options.path||re.path,persistAuthorization:this.options.persistAuthorization??!0,assetsPath:this.options.assetsPath,faviconPath:this.options.faviconFilePath,topbarIconPath:this.options.topbarIconFilePath,topbarBgColor:this.options.topbarBgColor});n.SwaggerModule.setup(this.options.path||re.path,this.app,e,{...t.getCustomOptions()})}}var ie;let se=class{static{ie=this}static get persistence(){if(!this._persistence)throw new c.InternalError("Persistence service not initialized");return this._persistence}static get log(){return this._logger||(this._logger=l.Logging.for(ie)),this._logger}constructor(e,t){this.options=e,this.moduleRef=t}static async bootPersistence(e){const t=this.log.for(this.bootPersistence);if(!this._persistence){const r=e.conf.map(([e,t,...r])=>r.pop()?[e,t,...r]:[e,t]);this._persistence=new i.PersistenceService,await this._persistence.boot(r);const a=this._persistence.client;for(let t=0;t<a.length;t++){const r=e.conf[t];let[,,o]=r;if(!o){const e=i.Adapter.transformerFor(a[t].flavour);if(!e)throw new c.InternalError(`No transformer found for flavour ${a[t].flavour}. you should either @requestToContextTransformer or provide a transformer in the config`);o=e instanceof U?e:new e}H(a[t].flavour)(o)}t.info("persistence layer created successfully!")}return this.persistence.client}static forRoot(e){const t={provide:I,useValue:e},r={useFactory:async e=>ie.bootPersistence(e),provide:M,durable:!0,scope:a.Scope.DEFAULT,inject:[I]};return{module:ie,providers:[r,t],exports:[r]}}async onApplicationShutdown(){const e=ie.log.for(this.onApplicationShutdown),t=this.moduleRef.get(M);for(const r of t)try{r&&(e.info("Shutting down "+r.toString()),await r.shutdown())}catch(t){e.error("Failed to shutdown application",t)}}};var ne;se=ie=p.__decorate([a.Global(),a.Module({}),p.__param(0,a.Inject(I)),p.__metadata("design:paramtypes",[Object,d.ModuleRef])],se),e.DecafModule=ne=class{static async forRootAsync(e){const{autoControllers:t,autoServices:r,handlers:a}=e,o=(await se.bootPersistence(e)).map(e=>e.flavour),i=[se.forRoot(e)];return t&&o.forEach(e=>{i.push(ee(e).forRoot(e,{autoServices:r,handlers:a}))}),{module:ne,imports:i}}},e.DecafModule=ne=p.__decorate([a.Module({})],e.DecafModule);const ce="##VERSION##",pe="##PACKAGE##";t.Metadata.registerLibrary(pe,ce),e.AUTH_HANDLER=N,e.AUTH_META_KEY=L,e.ApiOperationFromModel=w,e.ApiParamsFromModel=D,e.ApiProperty=b,e.Auth=B,e.AuthRole=j,e.BulkApiOperationFromModel=(e,r,o)=>{const i={GET:[c.BulkCrudOperationKeys.READ_ALL,a.Get],POST:[c.BulkCrudOperationKeys.CREATE_ALL,a.Post],PUT:[c.BulkCrudOperationKeys.UPDATE_ALL,a.Put],PATCH:[c.BulkCrudOperationKeys.UPDATE_ALL,a.Patch],DELETE:[c.BulkCrudOperationKeys.DELETE_ALL,a.Delete]},[s,p]=i[r];return R(e,s)?t.apply(n.ApiExcludeEndpoint()):t.apply(p(o))},e.CorsError=te,e.DECAF_ADAPTER_ID=M,e.DECAF_ADAPTER_OPTIONS=F,e.DECAF_CONTEXT_KEY=q,e.DECAF_HANDLERS=$,e.DECAF_MODULE_OPTIONS=I,e.DECAF_ROUTE=k,e.DECORATORS=g,e.DECORATORS_PREFIX=f,e.DecafAuthHandler=K,e.DecafBody=T,e.DecafController=J,e.DecafModelController=X,e.DecafParams=S,e.DecafQuery=C,e.DecafRoleAuthHandler=class extends K{constructor(){super()}async authorize(e,r){const a=e.switchToHttp().getRequest(),s=this.parseRequest(a);if(!s)throw new i.AuthorizationError("Unauthenticated");const n=t.Metadata.get(o.Model.get(r),j);if(!n.includes(s))throw new i.AuthorizationError("Missing role: "+s);return n}},e.DtoFor=W,e.FromModelController=Z,e.HttpVerbToDecorator=x,e.NestBootstraper=class{static get logger(){return this._logger||(this._logger=new a.Logger("NestBootstrap")),this._logger}static initialize(e){return this.app=e,this}static enableLogger(e){return this._logger=e||new a.Logger("NestBootstrap"),this.app.useLogger(this._logger),this}static enableCors(e=[],t=["GET","POST","PUT","DELETE"]){const r="*"===e?"*":e.map(e=>e.trim().toLowerCase()),a={origin:(e,t)=>e?"*"===r||Array.isArray(r)&&r.includes(e.toLowerCase())?t(null,!0):void t(new te(`Origin ${e} not allowed`)):t(null,!0),credentials:!0,methods:t.join(",")};return this.app.enableCors(a),this}static useHelmet(e){try{const t=require("helmet");this.app.use(t(e)),this.logger.log("Helmet middleware enabled successfully.")}catch(e){this.logger.warn("Helmet not installed. Skipping middleware.")}return this}static setupSwagger(e){return new oe(this.app,{title:e.title,description:e.description,version:e.version,path:e.path||"api",persistAuthorization:e.persistAuthorization??!0,assetsPath:e.assetsPath,faviconFilePath:e.faviconPath,topbarIconFilePath:e.topbarIconPath,topbarBgColor:e.topbarBgColor}).setupSwagger(),this}static useGlobalPipes(...e){return e.length>0&&this.app.useGlobalPipes(...e),this}static useGlobalFilters(...t){return this.app.useGlobalFilters(...t.length>0?t:[new e.DecafExceptionFilter]),this}static useGlobalInterceptors(...e){return e.length>0&&this.app.useGlobalInterceptors(...e),this}static async start(e=Number(process.env.PORT)||3e3,t=void 0,r=!0){this.app.listen(e,t).then(async()=>{if(r){const e=await this.app.getUrl();this.logger.log("\ud83d\ude80 Application is running at: "+e)}})}},e.PACKAGE_NAME=pe,e.Roles=e=>t.metadata(j,e),e.SwaggerBuilder=oe,e.UseDecafFilter=()=>a.UseFilters(new e.DecafExceptionFilter),e.VERSION=ce,e.createApiPropertyDecorator=O,e.createPropertyDecorator=P,e.getEnumType=E,e.getEnumValues=A,e.getModuleFor=ee,e.isOperationBlocked=R,e.isUndefined=_,e.repoForModel=e=>{const t=o.Model.get(e);if(!t)throw new c.InternalError("Failed to find repository for "+e);return i.Repository.forModel(t)},e.route=(e,r)=>{const a=k;return t.Decoration.for(a).define({decorator:()=>(o,i,s)=>{const n={path:r,httpMethod:e,handler:s};return t.apply(t.methodMetadata(t.Metadata.key(a,i),n))(o,i,s)},args:[]}).apply()}},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@decaf-ts/decoration"),require("@decaf-ts/injectable-decorators"),require("@nestjs/common"),require("@decaf-ts/decorator-validation"),require("@decaf-ts/core"),require("lodash"),require("@nestjs/swagger"),require("@decaf-ts/db-decorators"),require("tslib"),require("@nestjs/core"),require("@decaf-ts/logging"),require("fs"),require("path")):"function"==typeof define&&define.amd?define(["exports","@decaf-ts/decoration","@decaf-ts/injectable-decorators","@nestjs/common","@decaf-ts/decorator-validation","@decaf-ts/core","lodash","@nestjs/swagger","@decaf-ts/db-decorators","tslib","@nestjs/core","@decaf-ts/logging","fs","path"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["for-nest"]={},e.decafTsDecoration,e.decafTsInjectableDecorators,e.nestjsCommon,e.decafTsDecoratorValidation,e.decafTsCore,e.lodash,e.nestjsSwagger,e.decafTsDbDecorators,e.tslib,e.nestjsCore,e.decafTsLogging,e.fs,e.path);
2
2
  //# sourceMappingURL=for-nest.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"for-nest.cjs","sources":["../src/decoration.ts","../src/constants.ts","../src/core-module.ts","../src/decaf-model/decorators/ApiOperationFromModel.ts","../src/decaf-model/decorators/ApiParamsFromModel.ts","../src/decaf-model/decorators/DecafBody.ts","../src/decaf-model/decorators/DecafParams.ts","../src/decaf-model/decorators/utils.ts","../src/decaf-model/decorators/decorators.ts","../src/interceptors/AuthInterceptor.ts","../src/request/DecafRequestContext.ts","../src/request/DecafHandlerExecutor.ts","../src/decaf-model/utils.ts","../src/decaf-model/types.ts","../src/decaf-model/FromModelController.ts","../src/interceptors/DecafRequestHandlerInterceptor.ts","../src/decaf-model/DecafModelModule.ts","../src/module.ts","../src/factory/errors/cors.ts","../src/factory/exceptions/DecafErrorFilter.ts","../src/factory/openapi/constants.ts","../src/factory/openapi/SwaggerCustomUI.ts","../src/factory/openapi/SwaggerBuilder.ts","../src/index.ts","../src/factory/NestBootstraper.ts","../src/factory/exceptions/decorators.ts","../src/utils.ts","../src/decaf-model/decorators/route.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["Decoration","for","InjectablesKeys","INJECTABLE","extend","decorator","category","cfg","Object","assign","DefaultInjectablesConfig","Injectable","scope","singleton","Scope","DEFAULT","REQUEST","durable","undefined","apply","INJECT","target","propertyKey","descriptor","Inject","ValidationKeys","REQUIRED","ApiProperty","required","MAX","max","maximum","MIN","min","minimum","MAX_LENGTH","maxLength","MIN_LENGTH","minLength","LIST","clazz","c","Array","isArray","type","PATTERN","pat","pattern","source","PersistenceKeys","COLUMN","name","DecorationKeys","DESCRIPTION","description","DECAF_MODULE_OPTIONS","DECAF_ADAPTER_ID","DECAF_ROUTE","DECAF_HANDLERS","Symbol","DECAF_ADAPTER_OPTIONS","AUTH_HANDLER","AUTH_META_KEY","AuthRole","DecafCoreModule","this","_adapterInstance","log","_logger","Logging","DecafCoreModule_1","constructor","options","moduleRef","createAdapter","info","adapter","conf","alias","initialize","e","error","getAdapterInstance","forRoot","typeOrmModuleOptions","provide","useValue","useFactory","async","opts","inject","module","providers","exports","onApplicationShutdown","get","shutdown","isOperationBlocked","ModelConstructor","op","handler","args","Metadata","OperationKeys","REFLECT","BLOCK","ApiOperationFromModel","verb","path","httpToCrud","GET","READ","Get","POST","CREATE","Post","PUT","UPDATE","Put","PATCH","Patch","DELETE","Delete","crudOp","HttpMethodDecorator","ApiExcludeEndpoint","ApiParamsFromModel","props","decorators","map","p","ApiParamDec","String","applyDecorators","__decorate","Global","Module","__param","ModuleRef","DecafBody","createParamDecorator","data","ctx","body","switchToHttp","getRequest","controller","getClass","ModelConstr","InternalServerErrorException","item","OrderedParams","order","req","original","params","orderList","keys","ordered","k","raw","valuesInOrder","keysInOrder","DecafParams","HttpVerbToDecorator","Error","Auth","model","resource","SetMetadata","UseInterceptors","AuthInterceptor","reflector","authHandler","intercept","next","modelName","getHandler","authorize","handle","Optional","Reflector","DecafRequestContext","cache","Map","set","key","value","DecafHandlerExecutor","handlers","context","exec","res","apiParamSpec","getApiDecorators","methodName","routePath","httpVerb","includeQueryParams","NestHttpRouteDec","apiPathParams","split","filter","startsWith","slice","extractPathParams","swaggerQueryParams","push","ApiQuery","enum","OrderDirection","method","ApiParam","ApiOperation","summary","ApiOkResponse","ApiNoContentResponse","Query","applyApiDecorators","proto","prototype","forEach","d","index","createRouteHandler","pathParams","queryParams","debug","JSON","stringify","direction","limit","offset","persistence","ModelService","statement","resolvePersistenceMethod","defineRouteMethod","ControllerClass","defineProperty","writable","getOwnPropertyDescriptor","AbstractQueryController","LoggedClass","clientContext","super","FromModelController","getPersistence","ModelClazz","getService","Repository","forModel","createQueryRoutesFromRepository","prefix","QUERY","repo","class","queryMethods","routeMethods","QueryController","_persistence","adapterOptions","entries","replace","segment","trim","join","message","httpMethod","objValues","fields","f","create","tableName","Model","toKebabCase","modelClazzName","getPK","apiProperties","getRouteParametersFromModel","BaseController","DynamicModelController","pk","listBy","details","paginateBy","findOneBy","findBy","bookmark","a","parseInt","PreparedStatementKeys","FIND_BY","LIST_BY","PAGE_BY","FIND_ONE_BY","createAll","created","verbose","readAll","ids","read","length","routeParams","id","ValidationError","updateAll","updated","update","deleteAll","delete","del","Param","ApiNotFoundResponse","ApiBody","schema","items","$ref","getSchemaPath","ApiCreatedResponse","ApiBadRequestResponse","ApiUnprocessableEntityResponse","Controller","ApiTags","ApiExtraModels","composed","DBKeys","COMPOSED","composedKeys","uniqueKeys","from","Set","separator","DecafRequestHandlerInterceptor","executor","getResponse","DecafModelModule","DecafModelModule_1","createModelServices","models","flavour","trackedModels","Adapter","modelServices","autoServices","controllers","H","APP_INTERCEPTOR","useClass","DecafModule","DecafModule_1","forRootAsync","autoControllers","imports","CorsError","ForbiddenError","msg","DecafExceptionFilter","exception","host","response","request","isProduction","LoggedEnvironment","env","BaseError","InternalError","status","code","json","timestamp","Date","toISOString","url","Catch","SWAGGER_UI_CONSTANTS","title","version","faviconFilePath","topbarIconFilePath","auth","scheme","bearerFormat","in","persistAuthorization","topbarBgColor","SwaggerCustomUI","customCSS","css","topbarIconPath","b64","getCustomOptions","favicon","faviconPath","customSiteTitle","customCss","swaggerOptions","jsonDocumentUrl","yamlDocumentUrl","file","img","filePath","assetsPath","readFileSync","encoding","SwaggerBuilder","app","createDocument","config","DocumentBuilder","setTitle","setDescription","setVersion","addBearerAuth","build","SwaggerModule","extraModels","setupSwagger","document","swaggerUI","setup","VERSION","PACKAGE_NAME","registerLibrary","BulkCrudOperationKeys","READ_ALL","CREATE_ALL","UPDATE_ALL","DELETE_ALL","logger","Logger","enableLogger","customLogger","useLogger","enableCors","origins","allowMethods","allowedOrigins","o","toLowerCase","corsOptions","origin","callback","includes","credentials","methods","useHelmet","helmet","require","use","warn","useGlobalPipes","pipes","useGlobalFilters","filters","useGlobalInterceptors","interceptors","start","port","Number","process","PORT","listen","then","getUrl","roles","metadata","UseFilters","m","define","obj","prop","methodMetadata"],"mappings":"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"}
1
+ {"version":3,"file":"for-nest.cjs","sources":["../src/overrides/constants.ts","../src/overrides/decoration.ts","../src/overrides/helpers.ts","../src/decaf-model/decorators/ApiOperationFromModel.ts","../src/decaf-model/decorators/ApiParamsFromModel.ts","../src/decoration.ts","../src/decaf-model/decorators/DecafBody.ts","../src/decaf-model/decorators/DecafParams.ts","../src/decaf-model/decorators/utils.ts","../src/constants.ts","../src/decaf-model/decorators/decorators.ts","../src/interceptors/AuthInterceptor.ts","../src/request/DecafAuthHandler.ts","../src/request/DecafRequestContext.ts","../src/request/DecafHandlerExecutor.ts","../src/interceptors/context.ts","../src/request/RamRequestTransformer.ts","../src/decaf-model/utils.ts","../src/controllers.ts","../src/factory/openapi/DtoBuilder.ts","../src/decaf-model/FromModelController.ts","../src/decaf-model/DecafModelModule.ts","../src/overrides/overrides.ts","../src/interceptors/DecafRequestHandlerInterceptor.ts","../src/factory/errors/cors.ts","../src/factory/exceptions/DecafErrorFilter.ts","../src/factory/openapi/constants.ts","../src/factory/openapi/SwaggerCustomUI.ts","../src/factory/openapi/SwaggerBuilder.ts","../src/core-module.ts","../src/module.ts","../src/index.ts","../src/factory/NestBootstraper.ts","../src/factory/exceptions/decorators.ts","../src/utils.ts","../src/decaf-model/decorators/route.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["DECORATORS_PREFIX","DECORATORS","API_OPERATION","API_RESPONSE","API_PRODUCES","API_CONSUMES","API_TAGS","API_CALLBACKS","API_PARAMETERS","API_HEADERS","API_MODEL_PROPERTIES","API_MODEL_PROPERTIES_ARRAY","API_SECURITY","API_EXCLUDE_ENDPOINT","API_EXCLUDE_CONTROLLER","API_EXTRA_MODELS","API_EXTENSION","API_SCHEMA","API_DEFAULT_GETTER","API_LINK","isUndefined","obj","getEnumValues","enumType","Array","isArray","numericValues","Object","values","filter","value","map","toString","keys","key","includes","getEnumType","isString","length","createPropertyDecorator","metakey","metadata","overrideExisting","target","propertyKey","properties","Reflect","getMetadata","defineMetadata","existingMetadata","newMetadata","pickBy","negate","metadataToSave","type","constructor","ApiProperty","options","createApiPropertyDecorator","input","isArrayFlag","isInputArray","getTypeIsArrayTuple","opts","undefined","enum","enumValues","items","isOperationBlocked","ModelConstructor","op","handler","args","Metadata","get","OperationKeys","REFLECT","BLOCK","ApiOperationFromModel","verb","path","httpToCrud","GET","READ","Get","POST","CREATE","Post","PUT","UPDATE","Put","PATCH","Patch","DELETE","Delete","crudOp","HttpMethodDecorator","apply","ApiExcludeEndpoint","ApiParamsFromModel","props","decorators","p","ApiParamDec","name","description","required","String","applyDecorators","Decoration","for","InjectablesKeys","INJECTABLE","extend","decorator","category","cfg","assign","DefaultInjectablesConfig","Injectable","scope","singleton","Scope","DEFAULT","REQUEST","durable","INJECT","descriptor","Inject","ValidationKeys","REQUIRED","MAX","max","maximum","MIN","min","minimum","MAX_LENGTH","maxLength","MIN_LENGTH","minLength","TYPE","prop","DATE","format","ENUM","PATTERN","pat","pattern","source","PersistenceKeys","COLUMN","DecorationKeys","DESCRIPTION","DecafBody","createParamDecorator","data","ctx","body","switchToHttp","getRequest","controller","getClass","ModelConstr","class","InternalServerErrorException","item","OrderedParams","order","req","original","params","orderList","ordered","k","raw","valuesInOrder","keysInOrder","DecafParams","DecafQuery","_","parsed","query","limit","n","Number","isNaN","offset","bookmark","HttpVerbToDecorator","Error","DECAF_MODULE_OPTIONS","DECAF_ADAPTER_ID","DECAF_ROUTE","DECAF_HANDLERS","Symbol","DECAF_ADAPTER_OPTIONS","AUTH_HANDLER","AUTH_META_KEY","AuthRole","DECAF_CONTEXT_KEY","Auth","model","resource","SetMetadata","UseInterceptors","AuthInterceptor","exports","reflector","authHandler","this","intercept","next","modelName","getHandler","authorize","handle","__decorate","__param","Optional","Reflector","DecafAuthHandler","parseRequest","userRole","headers","authorization","split","AuthorizationError","Model","DecafRequestContext","applyCtx","_ctx","InternalError","DecafHandlerExecutor","handlers","context","exec","res","RequestToContextTransformer","requestToContextTransformer","flavour","set","RamTransformer","from","user","UUID","apiParamSpec","getApiDecorators","methodName","routePath","httpVerb","includeQueryParams","NestHttpRouteDec","apiPathParams","startsWith","slice","extractPathParams","swaggerQueryParams","push","ApiQuery","OrderDirection","method","ApiParam","ApiOperation","summary","ApiOkResponse","ApiNoContentResponse","Query","applyApiDecorators","proto","prototype","forEach","d","index","createRouteHandler","async","pathParams","queryParams","log","debug","JSON","stringify","direction","persistence","ModelService","statement","resolvePersistenceMethod","e","error","defineRouteMethod","ControllerClass","defineProperty","writable","getOwnPropertyDescriptor","DecafController","Service","clientContext","super","logCtx","operation","allowCreate","overrides","ContextualLoggedClass","call","DecafModelController","_persistence","getService","Repository","forModel","override","toOverrides","contextual","ctxArgs","repo","then","DtoFor","TransactionOperationKeys","isUpdate","BulkCrudOperationKeys","UPDATE_ALL","relations","exceptions","generated","pk","DynamicDTO","OmitType","addRelation","relation","relationDto","enumerable","configurable","toPascalCase","allowedTypes","meta","validationFor","LIST","FromModelController","Logging","getPersistence","ModelClazz","createQueryRoutesFromRepository","prefix","QUERY","queryMethods","routeMethods","QueryController","entries","replace","segment","trim","join","message","httpMethod","objValues","fields","f","create","tableName","toKebabCase","modelClazzName","getPK","apiProperties","getRouteParametersFromModel","BaseController","DynamicModelController","info","listBy","details","PreparedStatementKeys","LIST_BY","paginateBy","PAGE_BY","findOneBy","FIND_ONE_BY","findBy","FIND_BY","STATEMENT","a","parseInt","createAll","CREATE_ALL","created","verbose","readAll","ids","READ_ALL","read","routeParams","id","ValidationError","updateAll","updated","payloads","entry","parse","update","payload","deleteAll","DELETE_ALL","delete","del","Param","ApiNotFoundResponse","ApiBody","schema","$ref","getSchemaPath","ApiCreatedResponse","ApiBadRequestResponse","ApiUnprocessableEntityResponse","Controller","ApiTags","ApiExtraModels","composed","DBKeys","COMPOSED","composedKeys","uniqueKeys","Set","separator","getModuleFor","DecafModelModule","DecafModelModule_1","createModelServices","models","provide","useFactory","forRoot","trackedModels","Adapter","modelServices","autoServices","controllers","module","providers","H","APP_INTERCEPTOR","useClass","DecafRequestHandlerInterceptor","Module","transformerFor","adapter","alias","bind","flavoursToTransform","requestContext","executor","contextualize","flags","flavours","transformer","Context","accumulate","DefaultAdapterFlags","logger","timestamp","Date","getResponse","CorsError","ForbiddenError","msg","DecafExceptionFilter","exception","host","response","request","isProduction","LoggedEnvironment","env","BaseError","status","code","json","toISOString","url","Catch","SWAGGER_UI_CONSTANTS","title","version","faviconFilePath","topbarIconFilePath","auth","scheme","bearerFormat","in","persistAuthorization","topbarBgColor","SwaggerCustomUI","customCSS","css","topbarIconPath","b64","getCustomOptions","favicon","faviconPath","customSiteTitle","customCss","swaggerOptions","jsonDocumentUrl","yamlDocumentUrl","file","img","filePath","assetsPath","readFileSync","encoding","SwaggerBuilder","app","createDocument","config","DocumentBuilder","setTitle","setDescription","setVersion","addBearerAuth","build","SwaggerModule","extraModels","setupSwagger","document","swaggerUI","setup","DecafCoreModule","_logger","DecafCoreModule_1","moduleRef","bootPersistence","trimmed","conf","contr","pop","PersistenceService","boot","clients","client","i","c","typeOrmModuleOptions","useValue","inject","onApplicationShutdown","adapters","shutdown","Global","ModuleRef","DecafModule","DecafModule_1","forRootAsync","autoControllers","imports","VERSION","PACKAGE_NAME","registerLibrary","roles","Logger","initialize","enableLogger","customLogger","useLogger","enableCors","origins","allowMethods","allowedOrigins","o","toLowerCase","corsOptions","origin","callback","credentials","methods","useHelmet","helmet","require","use","warn","useGlobalPipes","pipes","useGlobalFilters","filters","useGlobalInterceptors","interceptors","start","port","process","PORT","listen","getUrl","UseFilters","m","define","methodMetadata"],"mappings":"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"}
package/dist/for-nest.js CHANGED
@@ -1,2 +1,2 @@
1
- import{Decoration as e,DecorationKeys as t,Metadata as r,apply as o,methodMetadata as i,metadata as s}from"@decaf-ts/decoration";import{InjectablesKeys as n,DefaultInjectablesConfig as a}from"@decaf-ts/injectable-decorators";import{Injectable as c,Scope as p,Inject as d,Global as l,Module as h,Get as u,Post as m,Put as y,Patch as g,Delete as f,applyDecorators as w,createParamDecorator as b,InternalServerErrorException as v,Optional as A,SetMetadata as $,UseInterceptors as E,Query as P,Param as T,Controller as S,Catch as O,UseFilters as R,Logger as k}from"@nestjs/common";import{ValidationKeys as F,Model as I}from"@decaf-ts/decorator-validation";import{PersistenceKeys as C,OrderDirection as j,ModelService as x,Repository as L,PreparedStatementKeys as D,Adapter as N,ForbiddenError as B}from"@decaf-ts/core";import{ApiProperty as _,ApiExcludeEndpoint as q,ApiParam as G,ApiQuery as U,ApiOperation as z,ApiOkResponse as M,ApiNoContentResponse as H,ApiNotFoundResponse as Q,ApiBody as J,getSchemaPath as Y,ApiCreatedResponse as K,ApiBadRequestResponse as V,ApiUnprocessableEntityResponse as W,ApiTags as X,ApiExtraModels as Z,DocumentBuilder as ee,SwaggerModule as te}from"@nestjs/swagger";import{__decorate as re,__param as oe,__metadata as ie}from"tslib";import{ModuleRef as se,Reflector as ne,APP_INTERCEPTOR as ae}from"@nestjs/core";import{Logging as ce,LoggedClass as pe,toKebabCase as de,LoggedEnvironment as le}from"@decaf-ts/logging";import{OperationKeys as he,BulkCrudOperationKeys as ue,ValidationError as me,DBKeys as ye,InternalError as ge,BaseError as fe}from"@decaf-ts/db-decorators";import{readFileSync as we}from"fs";import*as be from"path";e.for(n.INJECTABLE).extend({decorator:(e,t)=>(t=t||("object"==typeof e?Object.assign(e,a):a),c({scope:t.singleton?p.DEFAULT:p.REQUEST,durable:!t.singleton||void 0}))}).apply(),e.for(n.INJECT).extend({decorator:(e,t)=>(t,r,o)=>d(e||t)(t,r,o)}).apply(),e.for(F.REQUIRED).extend(_({required:!0})).apply(),e.for(F.MAX).extend({decorator:e=>_({maximum:e})}).apply(),e.for(F.MIN).extend({decorator:e=>_({minimum:e})}).apply(),e.for(F.MAX_LENGTH).extend({decorator:e=>_({maxLength:e})}).apply(),e.for(F.MIN_LENGTH).extend({decorator:e=>_({minLength:e})}).apply(),e.for(F.LIST).extend({decorator:e=>{const t=Array.isArray(e)?e[0]:e;return _({type:[t]})}}).apply(),e.for(F.PATTERN).extend({decorator:e=>_({pattern:"string"==typeof e?e:e.source})}).apply(),e.for(C.COLUMN).extend({decorator:e=>_({name:e})}).apply(),e.for(t.DESCRIPTION).extend({decorator:e=>_({description:e})}).apply();const ve="DecafModuleOptions",Ae="DecafAdapter",$e="DecafRoute",Ee=Symbol("DecafHandlers"),Pe=Symbol("DecafAdapterForOptions"),Te=Symbol("AUTH_HANDLER"),Se="auth:meta",Oe="AuthRole";var Re;let ke=class{static{Re=this}static{this._adapterInstance=null}static get log(){return this._logger||(this._logger=ce.for(Re)),this._logger}constructor(e,t){this.options=e,this.moduleRef=t}static async createAdapter(e){if(!this._adapterInstance){const t=this.log.for(this.createAdapter);t.info("Creating adapter instance..."),this._adapterInstance=new e.adapter(e.conf,e.alias);try{await this._adapterInstance.initialize()}catch(e){throw t.error("Failed to initialized adapter"),e}t.info("Adapter instance created successfully!")}return this._adapterInstance}static getAdapterInstance(){return this._adapterInstance}static forRoot(e){const t={provide:ve,useValue:e},r={useFactory:async e=>Re.createAdapter(e),provide:Ae,durable:!0,scope:p.DEFAULT,inject:[ve]};return{module:Re,providers:[r,t],exports:[r]}}async onApplicationShutdown(){const e=Re.log.for(this.onApplicationShutdown),t=this.moduleRef.get(Ae);try{t&&(e.info("Shutting down"),await t.shutdown(),Re._adapterInstance=null)}catch(t){e.error("Failed to shutdown application",t)}}};function Fe(e,t){const{handler:o,args:i}=r.get(e,he.REFLECT+he.BLOCK)||{};return!!o&&(o(...i,t)??!1)}function Ie(e,t,r){const i={GET:[he.READ,u],POST:[he.CREATE,m],PUT:[he.UPDATE,y],PATCH:[he.UPDATE,g],DELETE:[he.DELETE,f]},[s,n]=i[t];return Fe(e,s)?o(q()):o(n(r))}function Ce(e,t,r){const i={GET:[ue.READ_ALL,u],POST:[ue.CREATE_ALL,m],PUT:[ue.UPDATE_ALL,y],PATCH:[ue.UPDATE_ALL,g],DELETE:[ue.DELETE_ALL,f]},[s,n]=i[t];return Fe(e,s)?o(q()):o(n(r))}function je(e=[]){const t=e.map(e=>G({name:e.name,description:e.description??"Path parameter: "+e.name,required:e.required??!0,type:e.type??String}));return w(...t)}ke=Re=re([l(),h({}),oe(0,d(ve)),ie("design:paramtypes",[Object,se])],ke);const xe=b((e,t)=>{const r=t.switchToHttp().getRequest().body,o=t.getClass(),i=o.clazz;if(!i)throw new v(`ModelConstructor not found on controller ${o.name}. Ensure the controller was created via FromModelController.`);return r?Array.isArray(r)?r.map(e=>new i(e)):new i(r):r}),Le=b((e,t)=>{const r=t.switchToHttp().getRequest(),o=r?.params??{},i=e??Object.keys(o),s=i.map(e=>o[e]);return{raw:o,valuesInOrder:s,keysInOrder:i}});function De(e=[]){const t=e.map(e=>e.name);return Le(t)}function Ne(e){const t={GET:u,POST:m,PUT:y,PATCH:g,DELETE:f}[e];if(!t)throw Error(`Unsupported HTTP verb "${e}". No NestJS decorator mapping was found.`);return t}function Be(t,s){const n=$e;return e.for(n).define({decorator:()=>(e,a,c)=>{const p={path:s,httpMethod:t,handler:c};return o(i(r.key(n,a),p))(e,a,c)},args:[]}).apply()}let _e=class{constructor(e,t){this.reflector=e,this.authHandler=t}async intercept(e,t){const r=this.reflector.get(Se,e.getHandler())??this.reflector.get(Se,e.getClass());return r&&this.authHandler&&await this.authHandler.authorize(e,r),t.handle()}};function qe(e){const t="string"==typeof e?e:e.name;return w($(Se,t),E(_e))}_e=re([c(),oe(1,A()),oe(1,d(Te)),ie("design:paramtypes",[ne,Object])],_e);const Ge=e=>s(Oe,e);let Ue=class{constructor(){this.cache=new Map}set(e,t){this.cache.set(e,t)}get(e){return this.cache.get(e)}};Ue=re([c({scope:p.REQUEST})],Ue);let ze=class{constructor(e,t){this.handlers=e,this.context=t}async exec(e,t){for(const r of this.handlers)await r.handle(this.context,e,t)}};ze=re([c({scope:p.REQUEST}),oe(0,d(Ee)),ie("design:paramtypes",[Array,Ue])],ze);const Me=e=>({name:e,description:e+" parameter for the query",required:!0,type:String});function He(e,t,r,o=!1){const i=Ne(r),s=(e=>e.split("/").filter(e=>e.startsWith(":")).map(e=>e.slice(1)))(t).map(Me),n=[];return"GET"===r&&o&&n.push(U({name:"direction",required:!1,enum:j,description:"the sort order when applicable"}),U({name:"limit",required:!1,description:"limit or page size when applicable"}),U({name:"offset",required:!1,description:"offset or bookmark when applicable"})),{method:[i(t),...s.map(G),...n,z({summary:`Retrieve records using according to "${e}".`}),M({description:"Result successfully retrieved."}),H({description:"No content returned by the method."})],params:[De(s),P()]}}function Qe(e,t,r,o){const i=e?.prototype??e;o.method.forEach(e=>e(i,t,r)),o.params?.forEach((e,r)=>e(i,t,r))}function Je(e){return async function(t,r){const o=this.log.for(e);try{o.debug(`Invoking persistence method "${e}" given parameters: ${JSON.stringify(t.valuesInOrder)}`);const{direction:i,limit:s,offset:n}=r;return await((e,t,...r)=>{if(e instanceof x)return"function"==typeof e[t]?e[t](...r):e.statement(t,...r);if("function"==typeof e[t])return e[t](...r);throw Error(`Persistence method "${t}" not found on ${e?.constructor?.name}`)})(this.persistence,e,...t.valuesInOrder,i,s,n)}catch(t){throw o.error(`Custom query "${e}" failed`,t),t}}}function Ye(e,t,r){return Object.defineProperty(e.prototype||e,t,{value:r,writable:!1}),Object.getOwnPropertyDescriptor(e.prototype||e,t)}class Ke extends pe{constructor(e){super(),this.clientContext=e}get persistence(){throw Error("Not implemented")}}class Ve{static{this.log=ce.for(Ve.name)}static getPersistence(e){try{return x.getService(e)}catch(t){return L.forModel(e)}}static createQueryRoutesFromRepository(e,t=C.QUERY){const o=Ve.log.for(Ve.createQueryRoutesFromRepository),i=e instanceof x?e.repo:e,s=i.class,n=r.get(i.constructor,r.key(C.QUERY))??{},a=r.get(e.constructor,r.key($e))??{};class c extends Ke{constructor(e){super(e),this._persistence=Ve.getPersistence(s)}get persistence(){const e=this.clientContext.get(Pe);return e?this._persistence.for(e):this._persistence}}for(const[e,t]of Object.entries(a)){const r=[t.path.replace(/^\/+|\/+$/g,"")].filter(e=>e&&e.trim()).join("/"),i=Je(e);if(!i){const t=`Invalid or missing handler for model ${s.name} on decorated method ${e}`;throw o.error(t),Error(t)}const n=Ye(c,e,i);n&&Qe(c,e,n,He(e,r,t.httpMethod))}for(const[e,r]of Object.entries(n)){const o=[t,e,...(r.fields??[]).map(e=>":"+e)].filter(e=>e&&e.trim()).join("/"),i=Ye(c,e,Je(e));i&&Qe(c,e,i,He(e,o,"GET",!0))}return c}static create(e){const t=Ve.log.for(Ve.create),r=I.tableName(e),o=de(r),i=e.name,s=Ve.getPersistence(e),{description:n,getPK:a,apiProperties:c,path:p}=Ve.getRouteParametersFromModel(e);t.debug("Creating controller for model: "+i);const d=Ve.createQueryRoutesFromRepository(s);let l=class extends d{static{this.clazz=e}constructor(r){super(r),this.pk=I.pk(e),t.info(`Registering dynamic controller for model: ${i} route: /${o}`)}async listBy(e,t){return this.persistence.listBy(e,t.direction)}async paginateBy(e,t){return this.persistence.paginateBy(e,t.direction,t)}async findOneBy(e,t){return this.persistence.findOneBy(e,t)}async findBy(e,t,r){return this.persistence.findBy(e,t)}async statement(e,t,r){const{direction:o,offset:i,limit:s,bookmark:n}=r;switch(t=t.map(e=>("string"==typeof e?parseInt(e):e)||e),e){case D.FIND_BY:break;case D.LIST_BY:t.push(o);break;case D.PAGE_BY:t=[t[0],o,{limit:s,offset:i,bookmark:n}];case D.FIND_ONE_BY:}return this.persistence.statement(e,...t)}async createAll(t){const r=this.log.for(this.createAll);let o;r.verbose("creating new "+i);try{o=await this.persistence.createAll(t.map(t=>new e(t)))}catch(e){throw r.error("Failed to create new "+i,e),e}return r.info(`created new ${i} with id ${o[this.pk]}`),o}async create(e){const t=this.log.for(this.create);let r;t.verbose("creating new "+i);try{r=await this.persistence.create(e)}catch(e){throw t.error("Failed to create new "+i,e),e}return t.info(`created new ${i} with id ${r[this.pk]}`),r}async readAll(e){const t=this.log.for(this.readAll);let r;try{t.debug(`reading ${e.length} ${i}: ${e}`),r=await this.persistence.readAll(e)}catch(r){throw t.error(`Failed to ${i} with id ${e}`,r),r}return t.info(`read ${r.length} ${i}`),r}async read(e){const t=a(...e.valuesInOrder);if(void 0===t)throw new me(`No ${this.pk} provided`);const r=this.log.for(this.read);let o;try{r.debug(`reading ${i} with ${this.pk} ${t}`),o=await this.persistence.read(t)}catch(e){throw r.error(`Failed to read ${i} with id ${t}`,e),e}return r.info(`read ${i} with id ${o[this.pk]}`),o}async updateAll(e){const t=this.log.for(this.updateAll);let r;try{t.info(`updating ${e.length} ${i}`),r=await this.persistence.updateAll(e)}catch(e){throw t.error(e),e}return r}async update(t,r){const o=this.log.for(this.update),s=a(...t.valuesInOrder);if(void 0===s)throw new me(`No ${this.pk} provided`);let n;try{o.info(`updating ${i} with ${this.pk} ${s}`),n=await this.persistence.update(new e({...r,[this.pk]:s}))}catch(e){throw o.error(e),e}return n}async deleteAll(e){const t=this.log.for(this.deleteAll);let r;try{t.debug(`deleting ${e.length} ${i}: ${e}`),r=await this.persistence.deleteAll(e)}catch(r){throw t.error(`Failed to delete ${i} with id ${e}`,r),r}return t.info(`deleted ${r.length} ${i}`),r}async delete(e){const t=this.log.for(this.delete),r=a(...e.valuesInOrder);if(void 0===r)throw new me(`No ${this.pk} provided`);let o;try{t.debug(`deleting ${i} with ${this.pk} ${r}`),o=await this.persistence.delete(r)}catch(e){throw t.error(`Failed to delete ${i} with id ${r}`,e),e}return t.info(`deleted ${i} with id ${r}`),o}};return re([Ie(e,"GET","listBy/:key"),z({summary:`Retrieve ${i} records by query.`}),G({name:"key",description:"the model key to sort by"}),U({name:"direction",required:!0,enum:j}),M({description:i+" listed successfully."}),oe(1,P()),ie("design:type",Function),ie("design:paramtypes",[String,Object]),ie("design:returntype",Promise)],l.prototype,"listBy",null),re([Ie(e,"GET","paginateBy/:key/:page"),z({summary:`Retrieve ${i} records by query.`}),G({name:"key",description:"the model key to sort by"}),G({name:"page",description:"the page to retrieve or the bookmark"}),U({name:"direction",required:!0,enum:j,description:"the sort order"}),U({name:"limit",required:!0,description:"the page size"}),U({name:"offset",description:"the bookmark when necessary"}),M({description:i+" listed paginated."}),oe(0,T("key")),oe(1,P()),ie("design:type",Function),ie("design:paramtypes",[String,Object]),ie("design:returntype",Promise)],l.prototype,"paginateBy",null),re([Ie(e,"GET","findOneBy/:key"),z({summary:`Retrieve ${i} records by query.`}),G({name:"key",description:"the model key to sort by"}),M({description:i+" listed found."}),Q({description:`No ${i} record matches the provided identifier.`}),oe(0,T("key")),oe(1,T("value")),ie("design:type",Function),ie("design:paramtypes",[String,Object]),ie("design:returntype",Promise)],l.prototype,"findOneBy",null),re([Ie(e,"GET","findBy/:key/:value"),z({summary:`Retrieve ${i} records by query.`}),G({name:"key",description:"the model key to compare"}),G({name:"value",description:"the value to match"}),U({name:"direction",required:!0,enum:j,description:"the sort order when applicable"}),M({description:i+" listed found."}),Q({description:`No ${i} record matches the provided identifier.`}),oe(0,T("key")),oe(1,T("value")),oe(2,P()),ie("design:type",Function),ie("design:paramtypes",[String,Object,Object]),ie("design:returntype",Promise)],l.prototype,"findBy",null),re([Ie(e,"GET","statement/:method/*args"),z({summary:`Executes a prepared statement on ${i}.`}),G({name:"method",description:"the prepared statement to execute"}),G({name:"args",description:"concatenated list of arguments the prepared statement can accept"}),U({name:"direction",required:!0,enum:j,description:"the sort order when applicable"}),U({name:"limit",required:!0,description:"limit or page size when applicable"}),U({name:"offset",required:!0,description:"offset or bookmark when applicable"}),M({description:i+" listed found."}),Q({description:`No ${i} record matches the provided identifier.`}),oe(0,T("method")),oe(1,T("args")),oe(2,P()),ie("design:type",Function),ie("design:paramtypes",[String,Array,Object]),ie("design:returntype",Promise)],l.prototype,"statement",null),re([Ie(e,"POST","bulk"),z({summary:`Create a new ${i}.`}),J({description:"Payload for "+i,schema:{type:"array",items:{$ref:Y(e)}}}),K({description:`x ${i} created successfully.`}),V({description:"Payload validation failed."}),W({description:"Repository rejected the provided payload."}),oe(0,xe()),ie("design:type",Function),ie("design:paramtypes",[Array]),ie("design:returntype",Promise)],l.prototype,"createAll",null),re([Ie(e,"POST"),z({summary:`Create a new ${i}.`}),J({description:"Payload for "+i,schema:{$ref:Y(e)}}),K({description:i+" created successfully."}),V({description:"Payload validation failed."}),W({description:"Repository rejected the provided payload."}),oe(0,xe()),ie("design:type",Function),ie("design:paramtypes",[Object]),ie("design:returntype",Promise)],l.prototype,"create",null),re([Ie(e,"GET","bulk"),z({summary:`Retrieve a ${i} record by id.`}),U({name:"ids",required:!0,type:"array"}),M({description:i+" retrieved successfully."}),Q({description:`No ${i} record matches the provided identifier.`}),oe(0,P("ids")),ie("design:type",Function),ie("design:paramtypes",[Array]),ie("design:returntype",Promise)],l.prototype,"readAll",null),re([Ie(e,"GET",p),je(c),z({summary:`Retrieve a ${i} record by id.`}),M({description:i+" retrieved successfully."}),Q({description:`No ${i} record matches the provided identifier.`}),oe(0,De(c)),ie("design:type",Function),ie("design:paramtypes",[Object]),ie("design:returntype",Promise)],l.prototype,"read",null),re([Ie(e,"PUT","bulk"),je(c),z({summary:`Replace an existing ${i} record with a new payload.`}),J({description:"Payload for replace a existing record of "+i,schema:{type:"array",items:{$ref:Y(e)}}}),M({description:e+" record replaced successfully."}),Q({description:`No ${i} record matches the provided identifier.`}),V({description:"Payload validation failed."}),oe(0,xe()),ie("design:type",Function),ie("design:paramtypes",[Array]),ie("design:returntype",Promise)],l.prototype,"updateAll",null),re([Ie(e,"PUT",p),je(c),z({summary:`Replace an existing ${i} record with a new payload.`}),J({description:"Payload for replace a existing record of "+i,schema:{$ref:Y(e)}}),M({description:e+" record replaced successfully."}),Q({description:`No ${i} record matches the provided identifier.`}),V({description:"Payload validation failed."}),oe(0,De(c)),oe(1,xe()),ie("design:type",Function),ie("design:paramtypes",[Object,Object]),ie("design:returntype",Promise)],l.prototype,"update",null),re([Ie(e,"DELETE","bulk"),je(c),z({summary:`Retrieve a ${i} record by id.`}),U({name:"ids",required:!0,type:"array"}),M({description:i+" retrieved successfully."}),Q({description:`No ${i} record matches the provided identifier.`}),oe(0,P("ids")),ie("design:type",Function),ie("design:paramtypes",[Array]),ie("design:returntype",Promise)],l.prototype,"deleteAll",null),re([Ie(e,"DELETE",p),je(c),z({summary:`Delete a ${i} record by id.`}),M({description:i+" record deleted successfully."}),Q({description:`No ${i} record matches the provided identifier.`}),oe(0,De(c)),ie("design:type",Function),ie("design:paramtypes",[Object]),ie("design:returntype",Promise)],l.prototype,"delete",null),l=re([S(o),X(i),Z(e),qe(e),ie("design:paramtypes",[Ue])],l),l}static getRouteParametersFromModel(e){const t=I.pk(e),o=r.get(e,r.key(ye.COMPOSED,t)),i=o?.args??[],s=Array.isArray(i)&&i.length>0?Array.from(new Set([...i])):Array.from(new Set([t])),n=r.description(e);return{path:":"+s.join("/:"),description:n,apiProperties:s.map(t=>({name:t,description:r.description(e,t),required:!0,type:String})),getPK:(...e)=>o?.separator?e.join(o.separator):e.join("")}}}let We=class{constructor(e){this.executor=e}async intercept(e,t){const r=e.switchToHttp().getRequest(),o=e.switchToHttp().getResponse();return await this.executor.exec(r,o),t.handle()}};var Xe;We=re([c({scope:p.REQUEST}),ie("design:paramtypes",[ze])],We);let Ze=class{static{Xe=this}static{this.log=ce.for(Xe.name)}static createModelServices(e){return e.map(e=>({provide:e.name+"Service",useFactory:()=>x.forModel(e)}))}static forRoot(e,t={}){const r=this.log.for(this.forRoot);r.info("Generating controllers for flavour...");const o=N.models(e);let i=[];t.autoServices&&(r.info("Auto-services enabled. Initializing service generation."),i=this.createModelServices(o),r.info(`Auto-services completed. ${i.length} services initialized.`));const s=o.map(Ve.create);return r.info(`Generated ${s.length} controllers`),{module:Xe,controllers:s,providers:[{provide:Ee,useFactory:()=>t.handlers?.map(e=>(r.info("Registered request handler: "+e.name),new e))??[]},Ue,ze,{provide:ae,useClass:We},...i]}}};var et;Ze=Xe=re([h({})],Ze);let tt=et=class{static async forRootAsync(e){const{autoControllers:t,autoServices:r,handlers:o}=e,i=(await ke.createAdapter(e)).flavour,s=[ke.forRoot(e)];return t&&s.push(Ze.forRoot(i,{autoServices:r,handlers:o})),{module:et,imports:s}}};function rt(e){const t=I.get(e);if(!t)throw new ge("Failed to find repository for "+e);return L.forModel(t)}tt=et=re([h({})],tt);class ot extends B{constructor(e){super(e,ot.name)}}let it=class{catch(e,t){const r=t.switchToHttp(),o=r.getResponse(),i=r.getRequest(),s="production"===le.env;e instanceof fe||(e=new ge(e.message)),o.status(e.code).json({status:e.code,error:s?e.name:e.message,timestamp:(new Date).toISOString(),path:i.url,method:i.method})}};function st(){return R(new it)}it=re([O()],it);const nt={title:"Swagger | OpenAPI Specification (OAS)",description:"Standardized format for describing RESTful APIs",version:"0.0.1",path:"docs",faviconFilePath:"",topbarIconFilePath:"",auth:{type:"http",scheme:"bearer",bearerFormat:"JWT",name:"Authorization",description:"Enter JWT token",in:"header"},persistAuthorization:!0,topbarBgColor:"#000000"};class at{constructor(e){this.options={...e}}customCSS(){let e="";return this.options.topbarIconPath&&(e+=`.topbar-wrapper { content: url('data:image/png;base64,${this.b64(this.options.topbarIconPath)}'); width: 200px; height: auto; }\n`),e+`\n .topbar-wrapper svg { visibility: hidden; }\n .swagger-ui .topbar { background-color: ${this.options.topbarBgColor||nt.topbarBgColor}; }\n `}getCustomOptions(){const e={};return this.options.faviconPath&&(e.customfavIcon=this.b64(this.options.faviconPath,!0)),{customSiteTitle:this.options.title,...e,customCss:this.customCSS(),swaggerOptions:{persistAuthorization:this.options.persistAuthorization},jsonDocumentUrl:this.options.path?this.options.path+"/spec.json":void 0,yamlDocumentUrl:this.options.path?this.options.path+"/spec.yaml":void 0}}b64(e,t=!1){const r=be.join(this.options.assetsPath||"",e),o=we(r,{encoding:"base64"});return t?"data:image/png;base64,"+o:o}}class ct{constructor(e,t){this.app=e,this.options=t}createDocument(){const e=this.options.path?this.options.description+""+`<br><br><a href="${this.options.path}/spec.json">OpenAPI JSON Spec</a> | `+`<a href="${this.options.path}/spec.yaml">OpenAPI YAML Spec</a>`:this.options.description,t=(new ee).setTitle(this.options.title).setDescription(e).setVersion(this.options.version||"0.0.1").addBearerAuth(this.options.auth||nt.auth).build();return te.createDocument(this.app,t,{extraModels:this.options.extraModels||[]})}setupSwagger(){const e=this.createDocument(),t=new at({title:this.options.title,path:this.options.path||nt.path,persistAuthorization:this.options.persistAuthorization??!0,assetsPath:this.options.assetsPath,faviconPath:this.options.faviconFilePath,topbarIconPath:this.options.topbarIconFilePath,topbarBgColor:this.options.topbarBgColor});te.setup(this.options.path||nt.path,this.app,e,{...t.getCustomOptions()})}}class pt{static get logger(){return this._logger||(this._logger=new k("NestBootstrap")),this._logger}static initialize(e){return this.app=e,this}static enableLogger(e){return this._logger=e||new k("NestBootstrap"),this.app.useLogger(this._logger),this}static enableCors(e=[],t=["GET","POST","PUT","DELETE"]){const r="*"===e?"*":e.map(e=>e.trim().toLowerCase()),o={origin:(e,t)=>e?"*"===r||Array.isArray(r)&&r.includes(e.toLowerCase())?t(null,!0):void t(new ot(`Origin ${e} not allowed`)):t(null,!0),credentials:!0,methods:t.join(",")};return this.app.enableCors(o),this}static useHelmet(e){try{const t=require("helmet");this.app.use(t(e)),this.logger.log("Helmet middleware enabled successfully.")}catch(e){this.logger.warn("Helmet not installed. Skipping middleware.")}return this}static setupSwagger(e){return new ct(this.app,{title:e.title,description:e.description,version:e.version,path:e.path||"api",persistAuthorization:e.persistAuthorization??!0,assetsPath:e.assetsPath,faviconFilePath:e.faviconPath,topbarIconFilePath:e.topbarIconPath,topbarBgColor:e.topbarBgColor}).setupSwagger(),this}static useGlobalPipes(...e){return e.length>0&&this.app.useGlobalPipes(...e),this}static useGlobalFilters(...e){return this.app.useGlobalFilters(...e.length>0?e:[new it]),this}static useGlobalInterceptors(...e){return e.length>0&&this.app.useGlobalInterceptors(...e),this}static async start(e=Number(process.env.PORT)||3e3,t=void 0,r=!0){this.app.listen(e,t).then(async()=>{if(r){const e=await this.app.getUrl();this.logger.log("\ud83d\ude80 Application is running at: "+e)}})}}const dt="##VERSION##",lt="##PACKAGE##";r.registerLibrary(lt,dt);export{Te as AUTH_HANDLER,Se as AUTH_META_KEY,Ie as ApiOperationFromModel,je as ApiParamsFromModel,qe as Auth,_e as AuthInterceptor,Oe as AuthRole,Ce as BulkApiOperationFromModel,ot as CorsError,Ae as DECAF_ADAPTER_ID,Pe as DECAF_ADAPTER_OPTIONS,Ee as DECAF_HANDLERS,ve as DECAF_MODULE_OPTIONS,$e as DECAF_ROUTE,xe as DecafBody,it as DecafExceptionFilter,ze as DecafHandlerExecutor,Ze as DecafModelModule,tt as DecafModule,De as DecafParams,Ue as DecafRequestContext,We as DecafRequestHandlerInterceptor,Ve as FromModelController,Ne as HttpVerbToDecorator,pt as NestBootstraper,lt as PACKAGE_NAME,Ge as Roles,ct as SwaggerBuilder,st as UseDecafFilter,dt as VERSION,Fe as isOperationBlocked,rt as repoForModel,Be as route};
1
+ import{Decoration as e,DecorationKeys as t,Metadata as r,apply as o,methodMetadata as i,metadata as s}from"@decaf-ts/decoration";import{InjectablesKeys as n,DefaultInjectablesConfig as a}from"@decaf-ts/injectable-decorators";import{Injectable as c,Scope as p,Inject as d,Get as l,Post as u,Put as h,Patch as f,Delete as m,applyDecorators as y,createParamDecorator as g,InternalServerErrorException as w,Optional as E,SetMetadata as A,UseInterceptors as b,Query as P,Param as v,Controller as T,Module as R,Catch as O,UseFilters as x,Logger as $,Global as S}from"@nestjs/common";import{ValidationKeys as _,Model as C}from"@decaf-ts/decorator-validation";import{PersistenceKeys as I,AuthorizationError as k,OrderDirection as N,ModelService as D,Service as L,ContextualLoggedClass as F,Repository as j,TransactionOperationKeys as M,PreparedStatementKeys as q,Adapter as B,Context as U,DefaultAdapterFlags as G,ForbiddenError as H,PersistenceService as z}from"@decaf-ts/core";import{isArray as Y,isString as J,pickBy as Q,negate as K}from"lodash";import{ApiExcludeEndpoint as X,ApiParam as V,ApiQuery as W,ApiOperation as Z,ApiOkResponse as ee,ApiNoContentResponse as te,OmitType as re,ApiNotFoundResponse as oe,ApiBody as ie,getSchemaPath as se,ApiCreatedResponse as ne,ApiBadRequestResponse as ae,ApiUnprocessableEntityResponse as ce,ApiTags as pe,ApiExtraModels as de,DocumentBuilder as le,SwaggerModule as ue}from"@nestjs/swagger";import{OperationKeys as he,BulkCrudOperationKeys as fe,InternalError as me,DBKeys as ye,ValidationError as ge,BaseError as we}from"@decaf-ts/db-decorators";import{__decorate as Ee,__param as Ae,__metadata as be}from"tslib";import{Reflector as Pe,APP_INTERCEPTOR as ve,ModuleRef as Te}from"@nestjs/core";import{toPascalCase as Re,Logging as Oe,toKebabCase as xe,LoggedEnvironment as $e}from"@decaf-ts/logging";import{readFileSync as Se}from"fs";import*as _e from"path";const Ce="swagger",Ie={API_OPERATION:Ce+"/apiOperation",API_RESPONSE:Ce+"/apiResponse",API_PRODUCES:Ce+"/apiProduces",API_CONSUMES:Ce+"/apiConsumes",API_TAGS:Ce+"/apiUseTags",API_CALLBACKS:Ce+"/apiCallbacks",API_PARAMETERS:Ce+"/apiParameters",API_HEADERS:Ce+"/apiHeaders",API_MODEL_PROPERTIES:Ce+"/apiModelProperties",API_MODEL_PROPERTIES_ARRAY:Ce+"/apiModelPropertiesArray",API_SECURITY:Ce+"/apiSecurity",API_EXCLUDE_ENDPOINT:Ce+"/apiExcludeEndpoint",API_EXCLUDE_CONTROLLER:Ce+"/apiExcludeController",API_EXTRA_MODELS:Ce+"/apiExtraModels",API_EXTENSION:Ce+"/apiExtension",API_SCHEMA:Ce+"/apiSchema",API_DEFAULT_GETTER:Ce+"/apiDefaultGetter",API_LINK:Ce+"/apiLink"};function ke(e,t){if(!e)return[e,t];if(t)return[e,t];const r=Y(e);return[r?e[0]:e,r]}const Ne=e=>void 0===e;function De(e){if("function"==typeof e)return De(e());if(Array.isArray(e))return e;if("object"!=typeof e)return[];const t=Object.values(e).filter(e=>"number"==typeof e).map(e=>e.toString());return Object.keys(e).filter(e=>!t.includes(e)).map(t=>e[t])}function Le(e){return e.filter(J).length>0?"string":"number"}function Fe(e,t,r=!0){return(o,i)=>{const s=Reflect.getMetadata(Ie.API_MODEL_PROPERTIES_ARRAY,o)||[],n=":"+i;s.includes(n)||Reflect.defineMetadata(Ie.API_MODEL_PROPERTIES_ARRAY,[...s,":"+i],o);const a=Reflect.getMetadata(e,o,i);if(a){const s=Q(t,K(Ne)),n=r?{...a,...s}:{...s,...a};Reflect.defineMetadata(e,n,o,i)}else{const r=o?.constructor?._OPENAPI_METADATA_FACTORY?.()[i]?.type??Reflect.getMetadata("design:type",o,i);Reflect.defineMetadata(e,{type:r,...Q(t,K(Ne))},o,i)}}}function je(e={}){return Me(e)}function Me(e={},t=!0){const[r,o]=ke(e.type,e.isArray);if((i=e={...e,type:r,isArray:o}).isArray&&"enum"in i&&void 0!==i.enum){e.type="array";const t=De(e.enum);e.items={type:Le(t),enum:t},delete e.enum}else if("enum"in e&&void 0!==e.enum){const t=De(e.enum);e.enum=t,e.type=Le(t)}var i;return Array.isArray(e.type)&&(e.type="array",e.items={type:"array",items:{type:e.type[0]}}),Fe(Ie.API_MODEL_PROPERTIES,e,t)}function qe(e,t){const{handler:o,args:i}=r.get(e,he.REFLECT+he.BLOCK)||{};return!!o&&(o(...i,t)??!1)}function Be(e,t,r){const i={GET:[he.READ,l],POST:[he.CREATE,u],PUT:[he.UPDATE,h],PATCH:[he.UPDATE,f],DELETE:[he.DELETE,m]},[s,n]=i[t];return qe(e,s)?o(X()):o(n(r))}function Ue(e,t,r){const i={GET:[fe.READ_ALL,l],POST:[fe.CREATE_ALL,u],PUT:[fe.UPDATE_ALL,h],PATCH:[fe.UPDATE_ALL,f],DELETE:[fe.DELETE_ALL,m]},[s,n]=i[t];return qe(e,s)?o(X()):o(n(r))}function Ge(e=[]){const t=e.map(e=>V({name:e.name,description:e.description??"Path parameter: "+e.name,required:e.required??!0,type:e.type??String}));return y(...t)}e.for(n.INJECTABLE).extend({decorator:(e,t)=>(t=t||("object"==typeof e?Object.assign(e,a):a),c({scope:t.singleton?p.DEFAULT:p.REQUEST,durable:!t.singleton||void 0}))}).apply(),e.for(n.INJECT).extend({decorator:(e,t)=>(t,r,o)=>d(e||t)(t,r,o)}).apply(),e.for(_.REQUIRED).extend(je({required:!0})).apply(),e.for(_.MAX).extend({decorator:e=>je({maximum:e})}).apply(),e.for(_.MIN).extend({decorator:e=>je({minimum:e})}).apply(),e.for(_.MAX_LENGTH).extend({decorator:e=>je({maxLength:e})}).apply(),e.for(_.MIN_LENGTH).extend({decorator:e=>je({minLength:e})}).apply(),e.for(_.TYPE).extend({decorator:e=>(t,r)=>("function"!=typeof(e=Array.isArray(e)?e[0]:e)||e.name||(e=e()),je({type:e})(t,r))}).apply(),e.for(_.DATE).extend({decorator:e=>je({type:String,format:"date-time"})}).apply(),e.for(_.ENUM).extend({decorator:e=>je({enum:Array.isArray(e)?e:Object.values(e)})}).apply(),e.for(_.PATTERN).extend({decorator:e=>je({pattern:"string"==typeof e?e:e.source})}).apply(),e.for(I.COLUMN).extend({decorator:e=>je({name:e})}).apply(),e.for(t.DESCRIPTION).extend({decorator:e=>je({description:e})}).apply();const He=g((e,t)=>{const r=t.switchToHttp().getRequest().body,o=t.getClass(),i=o.class;if(!i)throw new w(`ModelConstructor not found on controller ${o.name}. Ensure the controller was created via FromModelController.`);return r?Array.isArray(r)?r.map(e=>new i(e)):new i(r):r}),ze=g((e,t)=>{const r=t.switchToHttp().getRequest(),o=r?.params??{},i=e??Object.keys(o),s=i.map(e=>o[e]);return{raw:o,valuesInOrder:s,keysInOrder:i}});function Ye(e=[]){const t=e.map(e=>e.name);return ze(t)}const Je=g((e,t)=>{const r={...t.switchToHttp().getRequest().query??{}};if(void 0!==r.limit){const e=Number(r.limit);Number.isNaN(e)||(r.limit=e)}if(void 0!==r.offset){const e=Number(r.offset);Number.isNaN(e)||(r.offset=e)}if(void 0!==r.bookmark){const e=Number(r.bookmark);r.bookmark=Number.isNaN(e)?r.bookmark:e}return r});function Qe(e){const t={GET:l,POST:u,PUT:h,PATCH:f,DELETE:m}[e];if(!t)throw Error(`Unsupported HTTP verb "${e}". No NestJS decorator mapping was found.`);return t}const Ke="DecafModuleOptions",Xe="DecafAdapter",Ve="DecafRoute",We=Symbol("DecafHandlers"),Ze=Symbol("DecafAdapterForOptions"),et=Symbol("AUTH_HANDLER"),tt="auth:meta",rt="AuthRole",ot=Symbol("decaf:context");function it(t,s){const n=Ve;return e.for(n).define({decorator:()=>(e,a,c)=>{const p={path:s,httpMethod:t,handler:c};return o(i(r.key(n,a),p))(e,a,c)},args:[]}).apply()}let st=class{constructor(e,t){this.reflector=e,this.authHandler=t}async intercept(e,t){const r=this.reflector.get(tt,e.getHandler())??this.reflector.get(tt,e.getClass());return r&&this.authHandler&&await this.authHandler.authorize(e,r),t.handle()}};function nt(e){const t="string"==typeof e?e:e.name;return y(A(tt,t),b(st))}st=Ee([c(),Ae(1,E()),Ae(1,d(et)),be("design:paramtypes",[Pe,Object])],st);const at=e=>s(rt,e);class ct{parseRequest(e){const t=e.headers.authorization?.split(" ")[1];return t}async authorize(e,t){const o=e.switchToHttp().getRequest(),i=this.parseRequest(o);if(!i)throw new k("Unauthenticated");if(!r.get(C.get(t),rt).includes(i))throw new k("Missing role: "+i)}}class pt extends ct{constructor(){super()}async authorize(e,t){const o=e.switchToHttp().getRequest(),i=this.parseRequest(o);if(!i)throw new k("Unauthenticated");const s=r.get(C.get(t),rt);if(!s.includes(i))throw new k("Missing role: "+i);return s}}let dt=class{applyCtx(e){this._ctx=e}get ctx(){if(!this._ctx)throw new me("Context not initialized for request");return this._ctx}};dt=Ee([c({scope:p.REQUEST})],dt);let lt=class{constructor(e,t){this.handlers=e,this.context=t}async exec(e,t){for(const r of this.handlers)await r.handle(this.context.ctx,e,t)}};lt=Ee([c({scope:p.REQUEST}),Ae(0,d(We)),be("design:paramtypes",[Array,dt])],lt);class ut{}function ht(e){return t=>(r.set("transformers",e,t),"function"==typeof t?s("transformers",e)(t):t)}let ft=class{async from(e){const t=e.headers.authorization?e.headers.authorization.split(" ")[1]:void 0;return t?{UUID:t}:{}}};ft=Ee([ht("ram")],ft);const mt=e=>({name:e,description:e+" parameter for the query",required:!0,type:String});function yt(e,t,r,o=!1){const i=Qe(r),s=(e=>e.split("/").filter(e=>e.startsWith(":")).map(e=>e.slice(1)))(t).map(mt),n=[];return"GET"===r&&o&&n.push(W({name:"direction",required:!1,enum:N,description:"the sort order when applicable"}),W({name:"limit",required:!1,description:"limit or page size when applicable"}),W({name:"offset",required:!1,description:"offset or bookmark when applicable"})),{method:[i(t),...s.map(V),...n,Z({summary:`Retrieve records using according to "${e}".`}),ee({description:"Result successfully retrieved."}),te({description:"No content returned by the method."})],params:[Ye(s),P()]}}function gt(e,t,r,o){const i=e?.prototype??e;o.method.forEach(e=>e(i,t,r)),o.params?.forEach((e,r)=>e(i,t,r))}function wt(e){return async function(t,r){const o=this.log.for(e);try{o.debug(`Invoking persistence method "${e}" given parameters: ${JSON.stringify(t.valuesInOrder)}`);const{direction:i,limit:s,offset:n}=r;return await((e,t,...r)=>{if(e instanceof D)return"function"==typeof e[t]?e[t](...r):e.statement(t,...r);if("function"==typeof e[t])return e[t](...r);throw Error(`Persistence method "${t}" not found on ${e?.constructor?.name}`)})(this.persistence(),e,...t.valuesInOrder,i,s,n)}catch(t){throw o.error(`Custom query "${e}" failed`,t),t}}}function Et(e,t,r){return Object.defineProperty(e.prototype||e,t,{value:r,writable:!1}),Object.getOwnPropertyDescriptor(e.prototype||e,t)}class At extends L{constructor(e,t){super(t),this.clientContext=e}logCtx(e,t,r=!1,o){const i=this.clientContext.ctx;return e=e.filter(e=>void 0!==e),F.logCtx.call(this,t,o||{},r,...e,i)}}class bt extends At{persistence(e){if(!this._persistence)try{this._persistence=D.getService(this.class)}catch(e){this._persistence=j.forModel(this.class)}return e?this._persistence instanceof j?this._persistence.override(e.toOverrides()):this._persistence.for(e.toOverrides()):this._persistence}constructor(e,t){super(e,t)}logCtx(e,t,r=!1){const o=this.clientContext.ctx;let i={};try{i=o.get("overrides")}catch(e){}const s=this.persistence(o);let n,a;return s instanceof D?n=s.repo.adapter:s instanceof j?n=s.adapter:s.context&&(n=s),r?n.logCtx(e,t,!0,i).then(e=>e):(a=n.logCtx(e,t,!1,i),a)}}function Pt(e,t){if(!M.includes(e))return t;const o=[he.UPDATE,fe.UPDATE_ALL].includes(e),i=r.properties(t)||[],s=C.relations(t)||[];let n=i.filter(e=>C.generated(t,e));o&&(n=n.filter(e=>e!==C.pk(t)));class a extends(re(t,n)){}function c(e,t,r){r||(Object.defineProperty(a.prototype,e,{value:r?[t]:t,writable:!0,enumerable:!0,configurable:!0}),Reflect.defineMetadata("design:type",t,a.prototype,e))}Object.defineProperty(a,"name",{value:`${Re(t.name)}${Re(e)}DTO`});for(const o of s){let i=r.allowedTypes(t,o);if(i=i?Array.isArray(i)?i[0]:i:void 0,i="function"!=typeof i||i.name?i:i(),!i)throw new me(`Type for relation ${o} not found`);if(C.get(i.name)){const s=r.validationFor(t,o);c(o,Pt(e,i),!!s[_.LIST])}}return a}class vt{static{this.log=Oe.for(vt.name)}static getPersistence(e){try{return D.getService(e)}catch(t){return j.forModel(e)}}static createQueryRoutesFromRepository(e,t=I.QUERY){const o=vt.log.for(vt.createQueryRoutesFromRepository),i=e instanceof D?e.repo:e,s=i.class,n=r.get(i.constructor,r.key(I.QUERY))??{},a=r.get(e.constructor,r.key(Ve))??{};class c extends bt{get class(){throw Error("Method not implemented.")}constructor(e,t){super(e,t)}}for(const[e,t]of Object.entries(a)){const r=[t.path.replace(/^\/+|\/+$/g,"")].filter(e=>e&&e.trim()).join("/"),i=wt(e);if(!i){const t=`Invalid or missing handler for model ${s.name} on decorated method ${e}`;throw o.error(t),Error(t)}const n=Et(c,e,i);n&&gt(c,e,n,yt(e,r,t.httpMethod))}for(const[e,r]of Object.entries(n)){const o=[t,e,...(r.fields??[]).map(e=>":"+e)].filter(e=>e&&e.trim()).join("/"),i=Et(c,e,wt(e));i&&gt(c,e,i,yt(e,o,"GET",!0))}return c}static create(e){const t=vt.log.for(vt.create),r=C.tableName(e),o=xe(r),i=e.name,s=vt.getPersistence(e),{description:n,getPK:a,apiProperties:c,path:p}=vt.getRouteParametersFromModel(e);t.debug("Creating controller for model: "+i);const d=vt.createQueryRoutesFromRepository(s);let l=class extends d{static get class(){return e}get class(){return e}constructor(r){super(r),this.pk=C.pk(e),t.info(`Registering dynamic controller for model: ${this.class.name} route: /${o}`)}async listBy(e,t){const{ctx:r}=(await this.logCtx([],q.LIST_BY,!0)).for(this.listBy);return this.persistence(r).listBy(e,t.direction,r)}async paginateBy(e,t){const{ctx:r}=(await this.logCtx([],q.PAGE_BY,!0)).for(this.paginateBy);return this.persistence(r).paginateBy(e,t.direction,t,r)}async findOneBy(e,t){const{ctx:r}=(await this.logCtx([],q.FIND_ONE_BY,!0)).for(this.findOneBy);return this.persistence(r).findOneBy(e,t,r)}async findBy(e,t,r){const{ctx:o}=(await this.logCtx([],q.FIND_BY,!0)).for(this.findBy);return this.persistence(o).for(o.toOverrides()).findBy(e,t,o)}async statement(e,t,r){const{ctx:o}=(await this.logCtx([],I.STATEMENT,!0)).for(this.statement),{direction:i,offset:s,limit:n,bookmark:a}=r;switch(t=t.map(e=>("string"==typeof e?parseInt(e):e)||e),e){case q.FIND_BY:break;case q.LIST_BY:t.push(i);break;case q.PAGE_BY:t=[t[0],i,{limit:n,offset:s,bookmark:a}];case q.FIND_ONE_BY:}return this.persistence(o).statement(e,...t,o)}async createAll(t){const{ctx:r,log:o}=(await this.logCtx([],fe.CREATE_ALL,!0)).for(this.createAll);let s;o.verbose("creating new "+i);try{s=await this.persistence(r).createAll(t.map(t=>new e(t)),r)}catch(e){throw o.error("Failed to create new "+i,e),e}return o.info(`created new ${i} with id ${s[this.pk]}`),s}async create(e){const{ctx:t,log:r}=(await this.logCtx([],he.CREATE,!0)).for(this.create);let o;r.verbose("creating new "+i);try{o=await this.persistence(t).create(e,t)}catch(e){throw r.error("Failed to create new "+i,e),e}return r.info(`created new ${i} with id ${o[this.pk]}`),o}async readAll(e){const{ctx:t,log:r}=(await this.logCtx([],fe.READ_ALL,!0)).for(this.readAll);let o;try{r.debug(`reading ${e.length} ${i}: ${e}`),o=await this.persistence(t).readAll(e,t)}catch(t){throw r.error(`Failed to ${i} with id ${e}`,t),t}return r.info(`read ${o.length} ${i}`),o}async read(e){const{ctx:t,log:r}=(await this.logCtx([],he.READ,!0)).for(this.read),o=a(...e.valuesInOrder);if(void 0===o)throw new ge(`No ${this.pk} provided`);let s;try{r.debug(`reading ${i} with ${this.pk} ${o}`),s=await this.persistence(t).read(o,t)}catch(e){throw r.error(`Failed to read ${i} with id ${o}`,e),e}return r.info(`read ${i} with id ${s[this.pk]}`),s}async updateAll(e){const{ctx:t,log:r}=(await this.logCtx([],fe.UPDATE_ALL,!0)).for(this.updateAll);let o;try{r.info(`updating ${e.length} ${i}`);const s=e.map(e=>JSON.parse(JSON.stringify(e)));o=await this.persistence(t).updateAll(s,t)}catch(e){throw r.error(e),e}return o}async update(t,r){const{ctx:o,log:s}=(await this.logCtx([],he.UPDATE,!0)).for(this.update),n=a(...t.valuesInOrder);if(void 0===n)throw new ge(`No ${this.pk} provided`);let c;try{s.info(`updating ${i} with ${this.pk} ${n}`);const t=JSON.parse(JSON.stringify(r));c=await this.persistence(o).update(new e({...t,[this.pk]:n}),o)}catch(e){throw s.error(e),e}return c}async deleteAll(e){const{ctx:t,log:r}=(await this.logCtx([],fe.DELETE_ALL,!0)).for(this.deleteAll);let o;try{r.debug(`deleting ${e.length} ${i}: ${e}`),o=await this.persistence(t).deleteAll(e,t)}catch(t){throw r.error(`Failed to delete ${i} with id ${e}`,t),t}return r.info(`deleted ${o.length} ${i}`),o}async delete(e){const{ctx:t,log:r}=(await this.logCtx([],he.DELETE,!0)).for(this.delete),o=a(...e.valuesInOrder);if(void 0===o)throw new ge(`No ${this.pk} provided`);let s;try{r.debug(`deleting ${i} with ${this.pk} ${o}`),s=await this.persistence(t).delete(o,t)}catch(e){throw r.error(`Failed to delete ${i} with id ${o}`,e),e}return r.info(`deleted ${i} with id ${o}`),s}};return Ee([Be(e,"GET","listBy/:key"),Z({summary:`Retrieve ${i} records by query.`}),V({name:"key",description:"the model key to sort by"}),W({name:"direction",required:!0,enum:N}),ee({description:i+" listed successfully."}),Ae(1,Je()),be("design:type",Function),be("design:paramtypes",[String,Object]),be("design:returntype",Promise)],l.prototype,"listBy",null),Ee([Be(e,"GET","paginateBy/:key/:page"),Z({summary:`Retrieve ${i} records by query.`}),V({name:"key",description:"the model key to sort by"}),V({name:"page",description:"the page to retrieve or the bookmark"}),W({name:"direction",required:!0,enum:N,description:"the sort order"}),W({name:"limit",required:!0,description:"the page size"}),W({name:"offset",description:"the bookmark when necessary"}),ee({description:i+" listed paginated."}),Ae(0,v("key")),Ae(1,Je()),be("design:type",Function),be("design:paramtypes",[String,Object]),be("design:returntype",Promise)],l.prototype,"paginateBy",null),Ee([Be(e,"GET","findOneBy/:key"),Z({summary:`Retrieve ${i} records by query.`}),V({name:"key",description:"the model key to sort by"}),ee({description:i+" listed found."}),oe({description:`No ${i} record matches the provided identifier.`}),Ae(0,v("key")),Ae(1,v("value")),be("design:type",Function),be("design:paramtypes",[String,Object]),be("design:returntype",Promise)],l.prototype,"findOneBy",null),Ee([Be(e,"GET","findBy/:key/:value"),Z({summary:`Retrieve ${i} records by query.`}),V({name:"key",description:"the model key to compare"}),V({name:"value",description:"the value to match"}),W({name:"direction",required:!0,enum:N,description:"the sort order when applicable"}),ee({description:i+" listed found."}),oe({description:`No ${i} record matches the provided identifier.`}),Ae(0,v("key")),Ae(1,v("value")),Ae(2,Je()),be("design:type",Function),be("design:paramtypes",[String,Object,Object]),be("design:returntype",Promise)],l.prototype,"findBy",null),Ee([Be(e,"GET","statement/:method/*args"),Z({summary:`Executes a prepared statement on ${i}.`}),V({name:"method",description:"the prepared statement to execute"}),V({name:"args",description:"concatenated list of arguments the prepared statement can accept"}),W({name:"direction",required:!0,enum:N,description:"the sort order when applicable"}),W({name:"limit",required:!0,description:"limit or page size when applicable"}),W({name:"offset",required:!0,description:"offset or bookmark when applicable"}),ee({description:i+" listed found."}),oe({description:`No ${i} record matches the provided identifier.`}),Ae(0,v("method")),Ae(1,v("args")),Ae(2,Je()),be("design:type",Function),be("design:paramtypes",[String,Array,Object]),be("design:returntype",Promise)],l.prototype,"statement",null),Ee([Be(e,"POST","bulk"),Z({summary:`Create a new ${i}.`}),ie({description:"Payload for "+i,schema:{type:"array",items:{$ref:se(e)}}}),ne({description:i+" created successfully.",schema:{type:"array",items:{$ref:se(e)}}}),ae({description:"Payload validation failed."}),ce({description:"Repository rejected the provided payload."}),Ae(0,He()),be("design:type",Function),be("design:paramtypes",[Array]),be("design:returntype",Promise)],l.prototype,"createAll",null),Ee([Be(e,"POST"),Z({summary:`Create a new ${i}.`}),ie({description:"Payload for "+i,type:Pt(he.CREATE,e)}),ne({description:i+" created successfully.",schema:{$ref:se(e)}}),ae({description:"Payload validation failed."}),ce({description:"Repository rejected the provided payload."}),Ae(0,He()),be("design:type",Function),be("design:paramtypes",[Object]),be("design:returntype",Promise)],l.prototype,"create",null),Ee([Be(e,"GET","bulk"),Z({summary:`Retrieve a ${i} record by id.`}),W({name:"ids",required:!0,type:"array"}),ee({description:i+" retrieved successfully.",schema:{type:"array",items:{$ref:se(e)}}}),oe({description:`No ${i} record matches the provided identifier.`}),Ae(0,P("ids")),be("design:type",Function),be("design:paramtypes",[Array]),be("design:returntype",Promise)],l.prototype,"readAll",null),Ee([Be(e,"GET",p),Ge(c),Z({summary:`Retrieve a ${i} record by id.`}),ee({description:i+" retrieved successfully.",schema:{$ref:se(e)}}),oe({description:`No ${i} record matches the provided identifier.`}),Ae(0,Ye(c)),be("design:type",Function),be("design:paramtypes",[Object]),be("design:returntype",Promise)],l.prototype,"read",null),Ee([Be(e,"PUT","bulk"),Ge(c),Z({summary:`Replace an existing ${i} record with a new payload.`}),ie({description:"Payload for replace a existing record of "+i,schema:{type:"array",items:{$ref:se(e)}}}),ne({description:i+" updated successfully.",schema:{type:"array",items:{$ref:se(e)}}}),oe({description:`No ${i} record matches the provided identifier.`}),ae({description:"Payload validation failed."}),Ae(0,He()),be("design:type",Function),be("design:paramtypes",[Array]),be("design:returntype",Promise)],l.prototype,"updateAll",null),Ee([Be(e,"PUT",p),Ge(c),Z({summary:`Replace an existing ${i} record with a new payload.`}),ie({description:"Payload for replace a existing record of "+i,schema:{$ref:se(e)}}),ee({description:i+" updated successfully."}),oe({description:`No ${i} record matches the provided identifier.`}),ae({description:"Payload validation failed."}),Ae(0,Ye(c)),Ae(1,He()),be("design:type",Function),be("design:paramtypes",[Object,Object]),be("design:returntype",Promise)],l.prototype,"update",null),Ee([Be(e,"DELETE","bulk"),Ge(c),Z({summary:`Retrieve a ${i} record by id.`}),W({name:"ids",required:!0,type:"array"}),ee({description:i+" retrieved successfully."}),oe({description:`No ${i} record matches the provided identifier.`}),Ae(0,P("ids")),be("design:type",Function),be("design:paramtypes",[Array]),be("design:returntype",Promise)],l.prototype,"deleteAll",null),Ee([Be(e,"DELETE",p),Ge(c),Z({summary:`Delete a ${i} record by id.`}),ee({description:i+" record deleted successfully."}),oe({description:`No ${i} record matches the provided identifier.`}),Ae(0,Ye(c)),be("design:type",Function),be("design:paramtypes",[Object]),be("design:returntype",Promise)],l.prototype,"delete",null),l=Ee([T(o),pe(i),de(e),nt(e),be("design:paramtypes",[dt])],l),l}static getRouteParametersFromModel(e){const t=C.pk(e),o=r.get(e,r.key(ye.COMPOSED,t)),i=o?.args??[],s=Array.isArray(i)&&i.length>0?Array.from(new Set([...i])):Array.from(new Set([t])),n=r.description(e);return{path:":"+s.join("/:"),description:n,apiProperties:s.map(t=>({name:t,description:r.description(e,t),required:!0,type:String})),getPK:(...e)=>o?.separator?e.join(o.separator):e.join("")}}}B.transformerFor=(e=>{const t="string"==typeof e?e:e.alias;return r.innerGet(Symbol.for("transformers"),t)}).bind(B),B.flavoursToTransform=(()=>{const e=r.innerGet(Symbol.for("transformers"));if(e)return Object.keys(e)}).bind(B);let Tt=class{constructor(e,t){this.requestContext=e,this.executor=t}async contextualize(e){const t={headers:e.headers,overrides:{}},r=B.flavoursToTransform();if(r)for(const o of r)try{const r=B.transformerFor(o),i=await r.from(e);Object.assign(t.overrides,i)}catch(e){throw new me("Failed to contextualize request: "+e)}return(new U).accumulate(Object.assign({},G,{logger:Oe.get(),timestamp:new Date},t))}async intercept(e,t){const r=e.switchToHttp().getRequest(),o=e.switchToHttp().getResponse(),i=await this.contextualize(r);return this.requestContext.applyCtx(i),await this.executor.exec(r,o),t.handle()}};function Rt(e){var t;let r=class{static{t=this}static{this.log=Oe.for(t.name).for(e)}static createModelServices(e){return e.map(e=>({provide:e.name+"Service",useFactory:()=>D.forModel(e)}))}static forRoot(e,r={}){const o=this.log.for(this.forRoot);o.info("Generating controllers for flavour...");const i=B.models(e);let s=[];r.autoServices&&(o.info("Auto-services enabled. Initializing service generation."),s=this.createModelServices(i),o.info(`Auto-services completed. ${s.length} services initialized.`));const n=i.map(vt.create);return o.info(`Generated ${n.length} controllers`),{module:t,controllers:n,providers:[{provide:We,useFactory:()=>r.handlers?.map(e=>(o.info("Registered request handler: "+e.name),new e))??[]},dt,lt,{provide:ve,useClass:Tt},...s]}}};return r=t=Ee([R({})],r),Object.assign(r,"name",{value:"DecafModule"+e}),r}Tt=Ee([c({scope:p.REQUEST}),be("design:paramtypes",[dt,lt])],Tt);class Ot extends H{constructor(e){super(e,Ot.name)}}let xt=class{catch(e,t){const r=t.switchToHttp(),o=r.getResponse(),i=r.getRequest(),s="production"===$e.env;e instanceof we||(e=new me(e.message)),o.status(e.code).json({status:e.code,error:s?e.name:e.message,timestamp:(new Date).toISOString(),path:i.url,method:i.method})}};function $t(){return x(new xt)}xt=Ee([O()],xt);const St={title:"Swagger | OpenAPI Specification (OAS)",description:"Standardized format for describing RESTful APIs",version:"0.0.1",path:"docs",faviconFilePath:"",topbarIconFilePath:"",auth:{type:"http",scheme:"bearer",bearerFormat:"JWT",name:"Authorization",description:"Enter JWT token",in:"header"},persistAuthorization:!0,topbarBgColor:"#000000"};class _t{constructor(e){this.options={...e}}customCSS(){let e="";return this.options.topbarIconPath&&(e+=`.topbar-wrapper { content: url('data:image/png;base64,${this.b64(this.options.topbarIconPath)}'); width: 200px; height: auto; }\n`),e+`\n .topbar-wrapper svg { visibility: hidden; }\n .swagger-ui .topbar { background-color: ${this.options.topbarBgColor||St.topbarBgColor}; }\n `}getCustomOptions(){const e={};return this.options.faviconPath&&(e.customfavIcon=this.b64(this.options.faviconPath,!0)),{customSiteTitle:this.options.title,...e,customCss:this.customCSS(),swaggerOptions:{persistAuthorization:this.options.persistAuthorization},jsonDocumentUrl:this.options.path?this.options.path+"/spec.json":void 0,yamlDocumentUrl:this.options.path?this.options.path+"/spec.yaml":void 0}}b64(e,t=!1){const r=_e.join(this.options.assetsPath||"",e),o=Se(r,{encoding:"base64"});return t?"data:image/png;base64,"+o:o}}class Ct{constructor(e,t){this.app=e,this.options=t}createDocument(){const e=this.options.path?this.options.description+""+`<br><br><a href="${this.options.path}/spec.json">OpenAPI JSON Spec</a> | `+`<a href="${this.options.path}/spec.yaml">OpenAPI YAML Spec</a>`:this.options.description,t=(new le).setTitle(this.options.title).setDescription(e).setVersion(this.options.version||"0.0.1").addBearerAuth(this.options.auth||St.auth).build();return ue.createDocument(this.app,t,{extraModels:this.options.extraModels||[]})}setupSwagger(){const e=this.createDocument(),t=new _t({title:this.options.title,path:this.options.path||St.path,persistAuthorization:this.options.persistAuthorization??!0,assetsPath:this.options.assetsPath,faviconPath:this.options.faviconFilePath,topbarIconPath:this.options.topbarIconFilePath,topbarBgColor:this.options.topbarBgColor});ue.setup(this.options.path||St.path,this.app,e,{...t.getCustomOptions()})}}class It{static get logger(){return this._logger||(this._logger=new $("NestBootstrap")),this._logger}static initialize(e){return this.app=e,this}static enableLogger(e){return this._logger=e||new $("NestBootstrap"),this.app.useLogger(this._logger),this}static enableCors(e=[],t=["GET","POST","PUT","DELETE"]){const r="*"===e?"*":e.map(e=>e.trim().toLowerCase()),o={origin:(e,t)=>e?"*"===r||Array.isArray(r)&&r.includes(e.toLowerCase())?t(null,!0):void t(new Ot(`Origin ${e} not allowed`)):t(null,!0),credentials:!0,methods:t.join(",")};return this.app.enableCors(o),this}static useHelmet(e){try{const t=require("helmet");this.app.use(t(e)),this.logger.log("Helmet middleware enabled successfully.")}catch(e){this.logger.warn("Helmet not installed. Skipping middleware.")}return this}static setupSwagger(e){return new Ct(this.app,{title:e.title,description:e.description,version:e.version,path:e.path||"api",persistAuthorization:e.persistAuthorization??!0,assetsPath:e.assetsPath,faviconFilePath:e.faviconPath,topbarIconFilePath:e.topbarIconPath,topbarBgColor:e.topbarBgColor}).setupSwagger(),this}static useGlobalPipes(...e){return e.length>0&&this.app.useGlobalPipes(...e),this}static useGlobalFilters(...e){return this.app.useGlobalFilters(...e.length>0?e:[new xt]),this}static useGlobalInterceptors(...e){return e.length>0&&this.app.useGlobalInterceptors(...e),this}static async start(e=Number(process.env.PORT)||3e3,t=void 0,r=!0){this.app.listen(e,t).then(async()=>{if(r){const e=await this.app.getUrl();this.logger.log("\ud83d\ude80 Application is running at: "+e)}})}}var kt;let Nt=class{static{kt=this}static get persistence(){if(!this._persistence)throw new me("Persistence service not initialized");return this._persistence}static get log(){return this._logger||(this._logger=Oe.for(kt)),this._logger}constructor(e,t){this.options=e,this.moduleRef=t}static async bootPersistence(e){const t=this.log.for(this.bootPersistence);if(!this._persistence){const r=e.conf.map(([e,t,...r])=>r.pop()?[e,t,...r]:[e,t]);this._persistence=new z,await this._persistence.boot(r);const o=this._persistence.client;for(let t=0;t<o.length;t++){const r=e.conf[t];let[,,i]=r;if(!i){const e=B.transformerFor(o[t].flavour);if(!e)throw new me(`No transformer found for flavour ${o[t].flavour}. you should either @requestToContextTransformer or provide a transformer in the config`);i=e instanceof ut?e:new e}ht(o[t].flavour)(i)}t.info("persistence layer created successfully!")}return this.persistence.client}static forRoot(e){const t={provide:Ke,useValue:e},r={useFactory:async e=>kt.bootPersistence(e),provide:Xe,durable:!0,scope:p.DEFAULT,inject:[Ke]};return{module:kt,providers:[r,t],exports:[r]}}async onApplicationShutdown(){const e=kt.log.for(this.onApplicationShutdown),t=this.moduleRef.get(Xe);for(const r of t)try{r&&(e.info("Shutting down "+r.toString()),await r.shutdown())}catch(t){e.error("Failed to shutdown application",t)}}};var Dt;Nt=kt=Ee([S(),R({}),Ae(0,d(Ke)),be("design:paramtypes",[Object,Te])],Nt);let Lt=Dt=class{static async forRootAsync(e){const{autoControllers:t,autoServices:r,handlers:o}=e,i=(await Nt.bootPersistence(e)).map(e=>e.flavour),s=[Nt.forRoot(e)];return t&&i.forEach(e=>{s.push(Rt(e).forRoot(e,{autoServices:r,handlers:o}))}),{module:Dt,imports:s}}};function Ft(e){const t=C.get(e);if(!t)throw new me("Failed to find repository for "+e);return j.forModel(t)}Lt=Dt=Ee([R({})],Lt);const jt="##VERSION##",Mt="##PACKAGE##";r.registerLibrary(Mt,jt);export{et as AUTH_HANDLER,tt as AUTH_META_KEY,Be as ApiOperationFromModel,Ge as ApiParamsFromModel,je as ApiProperty,nt as Auth,st as AuthInterceptor,rt as AuthRole,Ue as BulkApiOperationFromModel,Ot as CorsError,Xe as DECAF_ADAPTER_ID,Ze as DECAF_ADAPTER_OPTIONS,ot as DECAF_CONTEXT_KEY,We as DECAF_HANDLERS,Ke as DECAF_MODULE_OPTIONS,Ve as DECAF_ROUTE,Ie as DECORATORS,Ce as DECORATORS_PREFIX,ct as DecafAuthHandler,He as DecafBody,At as DecafController,xt as DecafExceptionFilter,lt as DecafHandlerExecutor,bt as DecafModelController,Lt as DecafModule,Ye as DecafParams,Je as DecafQuery,dt as DecafRequestContext,Tt as DecafRequestHandlerInterceptor,pt as DecafRoleAuthHandler,Pt as DtoFor,vt as FromModelController,Qe as HttpVerbToDecorator,It as NestBootstraper,Mt as PACKAGE_NAME,ft as RamTransformer,at as Roles,Ct as SwaggerBuilder,$t as UseDecafFilter,jt as VERSION,Me as createApiPropertyDecorator,Fe as createPropertyDecorator,Le as getEnumType,De as getEnumValues,Rt as getModuleFor,qe as isOperationBlocked,Ne as isUndefined,Ft as repoForModel,it as route};
2
2
  //# sourceMappingURL=for-nest.js.map