@decaf-ts/for-nest 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md 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: 9.6 KB kb gzipped
31
+ Minimal size: 9.8 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,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{put(e){let t;try{t=this.ctx.get("overrides")}catch(e){t={}}this._ctx=this.ctx.accumulate({overrides:Object.assign(t,e)})}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,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);const U=e=>({name:e,description:e+" parameter for the query",required:!0,type:String});function H(e,t,r,o=!1){const s=x(r),c=(e=>e.split("/").filter(e=>e.startsWith(":")).map(e=>e.slice(1)))(t).map(U),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 G(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 z(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 Q(e,t,r){return Object.defineProperty(e.prototype||e,t,{value:r,writable:!1}),Object.getOwnPropertyDescriptor(e.prototype||e,t)}class V 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 Y extends V{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 J(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,J(e,i),!!s[o.ValidationKeys.LIST])}}return u}class X{static{this.log=l.Logging.for(X.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=X.log.for(X.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 Y{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=z(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=Q(p,e,o);i&&G(p,e,i,H(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=Q(p,e,z(e));o&&G(p,e,o,H(e,a,"GET",!0))}return p}static create(t){const r=X.log.for(X.create),s=o.Model.tableName(t),d=l.toKebabCase(s),u=t.name,h=X.getPersistence(t),{description:m,getPK:y,apiProperties:f,path:g}=X.getRouteParametersFromModel(t);r.debug("Creating controller for model: "+u);const _=X.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:J(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("")}}}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 W{}function Z(e){return r=>(t.Metadata.set("transformers",e,r),"function"==typeof r?t.metadata("transformers",e)(r):r)}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(X.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}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 W?e:new e}Z(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=V,e.DecafModelController=Y,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=J,e.FromModelController=X,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.RequestToContextTransformer=W,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.requestToContextTransformer=Z,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);
1
+ var e,t;e=this,t=function(e,t,r,o,a,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 o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{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(o,a)=>{const i=Reflect.getMetadata(g.API_MODEL_PROPERTIES_ARRAY,o)||[],n=":"+a;i.includes(n)||Reflect.defineMetadata(g.API_MODEL_PROPERTIES_ARRAY,[...i,":"+a],o);const c=Reflect.getMetadata(e,o,a);if(c){const i=s.pickBy(t,s.negate(_)),n=r?{...c,...i}:{...i,...c};Reflect.defineMetadata(e,n,o,a)}else{const r=o?.constructor?._OPENAPI_METADATA_FACTORY?.()[a]?.type??Reflect.getMetadata("design:type",o,a);Reflect.defineMetadata(e,{type:r,...s.pickBy(t,s.negate(_))},o,a)}}}function b(e={}){return R(e)}function R(e={},t=!0){const[r,o]=((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((a=e={...e,type:r,isArray:o}).isArray&&"enum"in a&&void 0!==a.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 a;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 O(e,r){const{handler:o,args:a}=t.Metadata.get(e,c.OperationKeys.REFLECT+c.OperationKeys.BLOCK)||{};return!!o&&(o(...a,r)??!1)}function w(e,r,a){const i={GET:[c.OperationKeys.READ,o.Get],POST:[c.OperationKeys.CREATE,o.Post],PUT:[c.OperationKeys.UPDATE,o.Put],PATCH:[c.OperationKeys.UPDATE,o.Patch],DELETE:[c.OperationKeys.DELETE,o.Delete]},[s,p]=i[r];return O(e,s)?t.apply(n.ApiExcludeEndpoint()):t.apply(p(a))}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 o.applyDecorators(...t)}t.Decoration.for(r.InjectablesKeys.INJECTABLE).extend({decorator:(e,t)=>(t=t||("object"==typeof e?Object.assign(e,r.DefaultInjectablesConfig):r.DefaultInjectablesConfig),o.Injectable({scope:t.singleton?o.Scope.DEFAULT:o.Scope.REQUEST,durable:!t.singleton||void 0}))}).apply(),t.Decoration.for(r.InjectablesKeys.INJECT).extend({decorator:(e,t)=>(t,r,a)=>o.Inject(e||t)(t,r,a)}).apply(),t.Decoration.for(a.ValidationKeys.REQUIRED).extend(b({required:!0})).apply(),t.Decoration.for(a.ValidationKeys.MAX).extend({decorator:e=>b({maximum:e})}).apply(),t.Decoration.for(a.ValidationKeys.MIN).extend({decorator:e=>b({minimum:e})}).apply(),t.Decoration.for(a.ValidationKeys.MAX_LENGTH).extend({decorator:e=>b({maxLength:e})}).apply(),t.Decoration.for(a.ValidationKeys.MIN_LENGTH).extend({decorator:e=>b({minLength:e})}).apply(),t.Decoration.for(a.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(a.ValidationKeys.DATE).extend({decorator:e=>b({type:String,format:"date-time"})}).apply(),t.Decoration.for(a.ValidationKeys.ENUM).extend({decorator:e=>b({enum:Array.isArray(e)?e:Object.values(e)})}).apply(),t.Decoration.for(a.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=o.createParamDecorator((e,t)=>{const r=t.switchToHttp().getRequest().body,a=t.getClass(),i=a.class;if(!i)throw new o.InternalServerErrorException(`ModelConstructor not found on controller ${a.name}. Ensure the controller was created via FromModelController.`);return r?Array.isArray(r)?r.map(e=>new i(e)):new i(r):r}),v=o.createParamDecorator((e,t)=>{const r=t.switchToHttp().getRequest(),o=r?.params??{},a=e??Object.keys(o),i=a.map(e=>o[e]);return{raw:o,valuesInOrder:i,keysInOrder:a}});function S(e=[]){const t=e.map(e=>e.name);return v(t)}const C=o.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:o.Get,POST:o.Post,PUT:o.Put,PATCH:o.Patch,DELETE:o.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"),j="auth:meta",L="AuthRole",q=Symbol("decaf:context");function B(t){const r="string"==typeof t?t:t.name;return o.applyDecorators(o.SetMetadata(j,r),o.UseInterceptors(e.AuthInterceptor))}e.AuthInterceptor=class{constructor(e,t){this.reflector=e,this.authHandler=t}async intercept(e,t){const r=this.reflector.get(j,e.getHandler())??this.reflector.get(j,e.getClass());return r&&this.authHandler&&await this.authHandler.authorize(e,r),t.handle()}},e.AuthInterceptor=p.__decorate([o.Injectable(),p.__param(1,o.Optional()),p.__param(1,o.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 o=e.switchToHttp().getRequest(),s=this.parseRequest(o);if(!s)throw new i.AuthorizationError("Unauthenticated");if(!t.Metadata.get(a.Model.get(r),L).includes(s))throw new i.AuthorizationError("Missing role: "+s)}}e.DecafRequestContext=class{put(e){let t;try{t=this.ctx.get("overrides")}catch(e){t={}}this._ctx=this.ctx.accumulate({overrides:Object.assign(t,e)})}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([o.Injectable({scope:o.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=p.__decorate([o.Injectable({scope:o.Scope.REQUEST}),p.__param(0,o.Inject($)),p.__metadata("design:paramtypes",[Array,e.DecafRequestContext])],e.DecafHandlerExecutor);const U=e=>({name:e,description:e+" parameter for the query",required:!0,type:String});function H(e,t,r,a=!1){const s=x(r),c=(e=>e.split("/").filter(e=>e.startsWith(":")).map(e=>e.slice(1)))(t).map(U),p=[];return"GET"===r&&a&&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),o.Query()]}}function G(e,t,r,o){const a=e?.prototype??e;o.method.forEach(e=>e(a,t,r)),o.params?.forEach((e,r)=>e(a,t,r))}function z(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:a,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,a,s,n)}catch(t){throw o.error(`Custom query "${e}" failed`,t),t}}}function Q(e,t,r){return Object.defineProperty(e.prototype||e,t,{value:r,writable:!1}),Object.getOwnPropertyDescriptor(e.prototype||e,t)}class V extends i.Service{constructor(e,t){super(t),this.clientContext=e}logCtx(e,t,r=!1,o){const a=this.clientContext.ctx;return e=e.filter(e=>void 0!==e),i.ContextualLoggedClass.logCtx.call(this,t,o||{},r,...e,a)}}class Y extends V{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 o=this.clientContext.ctx;let a={};try{a=o.get("overrides")}catch(e){}const s=this.persistence(o);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,a).then(e=>e):(c=n.logCtx(e,t,!1,a),c)}}function J(e,r){if(!i.TransactionOperationKeys.includes(e))return r;const o=[c.OperationKeys.UPDATE,c.BulkCrudOperationKeys.UPDATE_ALL].includes(e),s=t.Metadata.properties(r)||[],p=a.Model.relations(r)||[];let d=s.filter(e=>a.Model.generated(r,e));o&&(d=d.filter(e=>e!==a.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 o of p){let i=t.Metadata.allowedTypes(r,o);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 ${o} not found`);if(a.Model.get(i.name)){const s=t.Metadata.validationFor(r,o);h(o,J(e,i),!!s[a.ValidationKeys.LIST])}}return u}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),i.Context.prototype.toResponse=function(e){const t=this.pending();return t&&e.header("x-pending-task",JSON.stringify(t)),e};class X{static{this.log=l.Logging.for(X.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 o=X.log.for(X.createQueryRoutesFromRepository),a=e instanceof i.ModelService?e.repo:e,s=a.class,n=t.Metadata.get(a.constructor,t.Metadata.key(i.PersistenceKeys.QUERY))??{},c=t.Metadata.get(e.constructor,t.Metadata.key(k))??{};class p extends Y{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("/"),a=z(e);if(!a){const t=`Invalid or missing handler for model ${s.name} on decorated method ${e}`;throw o.error(t),Error(t)}const i=Q(p,e,a);i&&G(p,e,i,H(e,r,t.httpMethod))}for(const[e,t]of Object.entries(n)){const o=[r,e,...(t.fields??[]).map(e=>":"+e)].filter(e=>e&&e.trim()).join("/"),a=Q(p,e,z(e));a&&G(p,e,a,H(e,o,"GET",!0))}return p}static create(t){const r=X.log.for(X.create),s=a.Model.tableName(t),d=l.toKebabCase(s),u=t.name,h=X.getPersistence(t),{description:m,getPK:y,apiProperties:f,path:g}=X.getRouteParametersFromModel(t);r.debug("Creating controller for model: "+u);const _=X.createQueryRoutesFromRepository(h);let A=class extends _{static get class(){return t}get class(){return t}constructor(e){super(e),this.pk=a.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:o}=(await this.logCtx([],i.PreparedStatementKeys.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.PersistenceKeys.STATEMENT,!0)).for(this.statement),{direction:a,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(a);break;case i.PreparedStatementKeys.PAGE_BY:t=[t[0],a,{limit:n,offset:s,bookmark:c}];case i.PreparedStatementKeys.FIND_ONE_BY:}return this.persistence(o).statement(e,...t,o)}async createAll(e,r){const{ctx:o,log:a}=(await this.logCtx([],c.BulkCrudOperationKeys.CREATE_ALL,!0)).for(this.createAll);let i;a.verbose("creating new "+u);try{i=await this.persistence(o).createAll(e.map(e=>new t(e)),o)}catch(e){throw a.error("Failed to create new "+u,e),e}return a.info(`created new ${u} with id ${i[this.pk]}`),o.toResponse(r),i}async create(e,t){const{ctx:r,log:o}=(await this.logCtx([],c.OperationKeys.CREATE,!0)).for(this.create);let a;o.verbose("creating new "+u);try{const t=this.persistence(r);a=await t.create(e,r)}catch(e){throw o.error("Failed to create new "+u,e),e}return o.info(`created new ${u} with id ${a[this.pk]}`),r.toResponse(t),a}async readAll(e){const{ctx:t,log:r}=(await this.logCtx([],c.BulkCrudOperationKeys.READ_ALL,!0)).for(this.readAll);let o;try{r.debug(`reading ${e.length} ${u}: ${e}`);const a=this.persistence(t);o=await a.readAll(e,t)}catch(t){throw r.error(`Failed to ${u} with id ${e}`,t),t}return r.info(`read ${o.length} ${u}`),o}async read(e){const{ctx:t,log:r}=(await this.logCtx([],c.OperationKeys.READ,!0)).for(this.read),o=y(...e.valuesInOrder);if(void 0===o)throw new c.ValidationError(`No ${this.pk} provided`);let a;try{r.debug(`reading ${u} with ${this.pk} ${o}`);const e=this.persistence(t);a=await e.read(o,t)}catch(e){throw r.error(`Failed to read ${u} with id ${o}`,e),e}return r.info(`read ${u} with id ${a[this.pk]}`),a}async updateAll(e,t){const{ctx:r,log:o}=(await this.logCtx([],c.BulkCrudOperationKeys.UPDATE_ALL,!0)).for(this.updateAll);let a;try{o.info(`updating ${e.length} ${u}`);const t=e.map(e=>JSON.parse(JSON.stringify(e)));a=await this.persistence(r).updateAll(t,r)}catch(e){throw o.error(e),e}return r.toResponse(t),a}async update(e,r,o){const{ctx:a,log:i}=(await this.logCtx([],c.OperationKeys.UPDATE,!0)).for(this.update),s=y(...e.valuesInOrder);if(void 0===s)throw new c.ValidationError(`No ${this.pk} provided`);let n;try{i.info(`updating ${u} with ${this.pk} ${s}`);const e=JSON.parse(JSON.stringify(r)),o=this.persistence(a);n=await o.update(new t({...e,[this.pk]:s}),a)}catch(e){throw i.error(e),e}return a.toResponse(o),n}async deleteAll(e,t){const{ctx:r,log:o}=(await this.logCtx([],c.BulkCrudOperationKeys.DELETE_ALL,!0)).for(this.deleteAll);let a;try{o.debug(`deleting ${e.length} ${u}: ${e}`),a=await this.persistence(r).deleteAll(e,r)}catch(t){throw o.error(`Failed to delete ${u} with id ${e}`,t),t}return o.info(`deleted ${a.length} ${u}`),r.toResponse(t),a}async delete(e,t){const{ctx:r,log:o}=(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 i;try{o.debug(`deleting ${u} with ${this.pk} ${a}`),i=await this.persistence(r).delete(a,r)}catch(e){throw o.error(`Failed to delete ${u} with id ${a}`,e),e}return o.info(`deleted ${u} with id ${a}`),r.toResponse(t),i}};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,o.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,o.Param("key")),p.__param(1,o.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,o.Param("key")),p.__param(1,o.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,o.Param("method")),p.__param(1,o.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.__param(1,o.Response({passthrough:!0})),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Array,Object]),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:J(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.__param(1,o.Response({passthrough:!0})),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Object,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,o.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.__param(1,o.Response({passthrough:!0})),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Array,Object]),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.__param(2,o.Response({passthrough:!0})),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Object,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,o.Query("ids")),p.__param(1,o.Response({passthrough:!0})),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Array,Object]),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.__param(1,o.Response({passthrough:!0})),p.__metadata("design:type",Function),p.__metadata("design:paramtypes",[Object,Object]),p.__metadata("design:returntype",Promise)],A.prototype,"delete",null),A=p.__decorate([o.Controller(d),n.ApiTags(u),n.ApiExtraModels(t),B(t),p.__metadata("design:paramtypes",[e.DecafRequestContext])],A),A}static getRouteParametersFromModel(e){const r=a.Model.pk(e),o=t.Metadata.get(e,t.Metadata.key(c.DBKeys.COMPOSED,r)),i=o?.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)=>o?.separator?e.join(o.separator):e.join("")}}}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 o of r)try{const r=i.Adapter.transformerFor(o),a=await r.from(e);Object.assign(t.overrides,a)}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(),o=e.switchToHttp().getResponse(),a=await this.contextualize(r);return this.requestContext.applyCtx(a),await this.executor.exec(r,o),t.handle()}},e.DecafRequestHandlerInterceptor=p.__decorate([o.Injectable({scope:o.Scope.REQUEST}),p.__metadata("design:paramtypes",[e.DecafRequestContext,e.DecafHandlerExecutor])],e.DecafRequestHandlerInterceptor);class W{}function Z(e){return r=>(t.Metadata.set("transformers",e,r),"function"==typeof r?t.metadata("transformers",e)(r):r)}function ee(t){var r;let a=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,o={}){const a=this.log.for(this.forRoot);a.info("Generating controllers for flavour...");const s=i.Adapter.models(t);let n=[];o.autoServices&&(a.info("Auto-services enabled. Initializing service generation."),n=this.createModelServices(s),a.info(`Auto-services completed. ${n.length} services initialized.`));const c=s.map(X.create);return a.info(`Generated ${c.length} controllers`),{module:r,controllers:c,providers:[{provide:$,useFactory:()=>o.handlers?.map(e=>(a.info("Registered request handler: "+e.name),new e))??[]},e.DecafRequestContext,e.DecafHandlerExecutor,{provide:d.APP_INTERCEPTOR,useClass:e.DecafRequestHandlerInterceptor},...n]}}};return a=r=p.__decorate([o.Module({})],a),Object.assign(a,"name",{value:"DecafModule"+t}),a}class te extends i.ForbiddenError{constructor(e){super(e,te.name)}}e.DecafExceptionFilter=class{catch(e,t){const r=t.switchToHttp(),o=r.getResponse(),a=r.getRequest(),i="production"===l.LoggedEnvironment.env;e instanceof c.BaseError||(e=new c.InternalError(e.message)),o.status(e.code).json({status:e.code,error:i?e.name:e.message,timestamp:(new Date).toISOString(),path:a.url,method:a.method})}},e.DecafExceptionFilter=p.__decorate([o.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 oe{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),o=u.readFileSync(r,{encoding:"base64"});return t?"data:image/png;base64,"+o:o}}class ae{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 oe({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 o=this._persistence.client;for(let t=0;t<o.length;t++){const r=e.conf[t];let[,,a]=r;if(!a){const e=i.Adapter.transformerFor(o[t].flavour);if(!e)throw new c.InternalError(`No transformer found for flavour ${o[t].flavour}. you should either @requestToContextTransformer or provide a transformer in the config`);a=e instanceof W?e:new e}Z(o[t].flavour)(a)}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:o.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([o.Global(),o.Module({}),p.__param(0,o.Inject(I)),p.__metadata("design:paramtypes",[Object,d.ModuleRef])],se),e.DecafModule=ne=class{static async forRootAsync(e){const{autoControllers:t,autoServices:r,handlers:o}=e,a=(await se.bootPersistence(e)).map(e=>e.flavour),i=[se.forRoot(e)];return t&&a.forEach(e=>{i.push(ee(e).forRoot(e,{autoServices:r,handlers:o}))}),{module:ne,imports:i}}},e.DecafModule=ne=p.__decorate([o.Module({})],e.DecafModule);const ce="##VERSION##",pe="##PACKAGE##";t.Metadata.registerLibrary(pe,ce),e.AUTH_HANDLER=N,e.AUTH_META_KEY=j,e.ApiOperationFromModel=w,e.ApiParamsFromModel=D,e.ApiProperty=b,e.Auth=B,e.AuthRole=L,e.BulkApiOperationFromModel=(e,r,a)=>{const i={GET:[c.BulkCrudOperationKeys.READ_ALL,o.Get],POST:[c.BulkCrudOperationKeys.CREATE_ALL,o.Post],PUT:[c.BulkCrudOperationKeys.UPDATE_ALL,o.Put],PATCH:[c.BulkCrudOperationKeys.UPDATE_ALL,o.Patch],DELETE:[c.BulkCrudOperationKeys.DELETE_ALL,o.Delete]},[s,p]=i[r];return O(e,s)?t.apply(n.ApiExcludeEndpoint()):t.apply(p(a))},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=V,e.DecafModelController=Y,e.DecafParams=S,e.DecafQuery=C,e.DecafRoleAuthHandler=class extends K{constructor(){super()}async authorize(e,r){const o=e.switchToHttp().getRequest(),s=this.parseRequest(o);if(!s)throw new i.AuthorizationError("Unauthenticated");const n=t.Metadata.get(a.Model.get(r),L);if(!n.includes(s))throw new i.AuthorizationError("Missing role: "+s);return n}},e.DtoFor=J,e.FromModelController=X,e.HttpVerbToDecorator=x,e.NestBootstraper=class{static get logger(){return this._logger||(this._logger=new o.Logger("NestBootstrap")),this._logger}static initialize(e){return this.app=e,this}static enableLogger(e){return this._logger=e||new o.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()),o={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(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 ae(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.RequestToContextTransformer=W,e.Roles=e=>t.metadata(L,e),e.SwaggerBuilder=ae,e.UseDecafFilter=()=>o.UseFilters(new e.DecafExceptionFilter),e.VERSION=ce,e.createApiPropertyDecorator=R,e.createPropertyDecorator=P,e.getEnumType=E,e.getEnumValues=A,e.getModuleFor=ee,e.isOperationBlocked=O,e.isUndefined=_,e.repoForModel=e=>{const t=a.Model.get(e);if(!t)throw new c.InternalError("Failed to find repository for "+e);return i.Repository.forModel(t)},e.requestToContextTransformer=Z,e.route=(e,r)=>{const o=k;return t.Decoration.for(o).define({decorator:()=>(a,i,s)=>{const n={path:r,httpMethod:e,handler:s};return t.apply(t.methodMetadata(t.Metadata.key(o,i),n))(a,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/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/decaf-model/utils.ts","../src/controllers.ts","../src/factory/openapi/DtoBuilder.ts","../src/decaf-model/FromModelController.ts","../src/overrides/overrides.ts","../src/interceptors/DecafRequestHandlerInterceptor.ts","../src/interceptors/context.ts","../src/decaf-model/DecafModelModule.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],"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","put","record","overrides","e","_ctx","accumulate","applyCtx","InternalError","DecafHandlerExecutor","handlers","context","exec","res","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","error","defineRouteMethod","ControllerClass","defineProperty","writable","getOwnPropertyDescriptor","DecafController","Service","clientContext","super","logCtx","operation","allowCreate","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","from","Set","separator","Adapter","transformerFor","adapter","alias","bind","flavoursToTransform","DecafRequestHandlerInterceptor","requestContext","executor","contextualize","flags","flavours","flavour","transformer","Context","DefaultAdapterFlags","logger","timestamp","Date","getResponse","RequestToContextTransformer","requestToContextTransformer","set","getModuleFor","DecafModelModule","DecafModelModule_1","createModelServices","models","provide","useFactory","forRoot","trackedModels","modelServices","autoServices","controllers","module","providers","H","APP_INTERCEPTOR","useClass","Module","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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"}
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/decaf-model/utils.ts","../src/controllers.ts","../src/factory/openapi/DtoBuilder.ts","../src/overrides/overrides.ts","../src/decaf-model/FromModelController.ts","../src/interceptors/DecafRequestHandlerInterceptor.ts","../src/interceptors/context.ts","../src/decaf-model/DecafModelModule.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],"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","put","record","overrides","e","_ctx","accumulate","applyCtx","InternalError","DecafHandlerExecutor","handlers","context","exec","res","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","error","defineRouteMethod","ControllerClass","defineProperty","writable","getOwnPropertyDescriptor","DecafController","Service","clientContext","super","logCtx","operation","allowCreate","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","Adapter","transformerFor","adapter","alias","bind","flavoursToTransform","core","Context","toResponse","pending","header","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","resp","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","Response","passthrough","Controller","ApiTags","ApiExtraModels","composed","DBKeys","COMPOSED","composedKeys","uniqueKeys","from","Set","separator","DecafRequestHandlerInterceptor","requestContext","executor","contextualize","flags","flavours","flavour","transformer","DefaultAdapterFlags","logger","timestamp","Date","getResponse","RequestToContextTransformer","requestToContextTransformer","set","getModuleFor","DecafModelModule","DecafModelModule_1","createModelServices","models","provide","useFactory","forRoot","trackedModels","modelServices","autoServices","controllers","module","providers","H","APP_INTERCEPTOR","useClass","Module","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,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 L,Service as D,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 Le(e){if("function"==typeof e)return Le(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 De(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=Le(e.enum);e.items={type:De(t),enum:t},delete e.enum}else if("enum"in e&&void 0!==e.enum){const t=Le(e.enum);e.enum=t,e.type=De(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{put(e){let t;try{t=this.ctx.get("overrides")}catch(e){t={}}this._ctx=this.ctx.accumulate({overrides:Object.assign(t,e)})}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,e,t)}};lt=Ee([c({scope:p.REQUEST}),Ae(0,d(We)),be("design:paramtypes",[Array,dt])],lt);const ut=e=>({name:e,description:e+" parameter for the query",required:!0,type:String});function ht(e,t,r,o=!1){const i=Qe(r),s=(e=>e.split("/").filter(e=>e.startsWith(":")).map(e=>e.slice(1)))(t).map(ut),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 ft(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 mt(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 L)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 yt(e,t,r){return Object.defineProperty(e.prototype||e,t,{value:r,writable:!1}),Object.getOwnPropertyDescriptor(e.prototype||e,t)}class gt extends D{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 wt extends gt{persistence(e){if(!this._persistence)try{this._persistence=L.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 L?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 Et(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,Et(e,i),!!s[_.LIST])}}return a}class At{static{this.log=Oe.for(At.name)}static getPersistence(e){try{return L.getService(e)}catch(t){return j.forModel(e)}}static createQueryRoutesFromRepository(e,t=I.QUERY){const o=At.log.for(At.createQueryRoutesFromRepository),i=e instanceof L?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 wt{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=mt(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=yt(c,e,i);n&&ft(c,e,n,ht(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=yt(c,e,mt(e));i&&ft(c,e,i,ht(e,o,"GET",!0))}return c}static create(e){const t=At.log.for(At.create),r=C.tableName(e),o=xe(r),i=e.name,s=At.getPersistence(e),{description:n,getPK:a,apiProperties:c,path:p}=At.getRouteParametersFromModel(e);t.debug("Creating controller for model: "+i);const d=At.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:Et(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 bt=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()}};bt=Ee([c({scope:p.REQUEST}),be("design:paramtypes",[dt,lt])],bt);class Pt{}function vt(e){return t=>(r.set("transformers",e,t),"function"==typeof t?s("transformers",e)(t):t)}function Tt(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:()=>L.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(At.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:bt},...s]}}};return r=t=Ee([R({})],r),Object.assign(r,"name",{value:"DecafModule"+e}),r}class Rt extends H{constructor(e){super(e,Rt.name)}}let Ot=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 xt(){return x(new Ot)}Ot=Ee([O()],Ot);const $t={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 St{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||$t.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 _t{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||$t.auth).build();return ue.createDocument(this.app,t,{extraModels:this.options.extraModels||[]})}setupSwagger(){const e=this.createDocument(),t=new St({title:this.options.title,path:this.options.path||$t.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||$t.path,this.app,e,{...t.getCustomOptions()})}}class Ct{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 Rt(`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 _t(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 Ot]),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 It;let kt=class{static{It=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(It)),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 Pt?e:new e}vt(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=>It.bootPersistence(e),provide:Xe,durable:!0,scope:p.DEFAULT,inject:[Ke]};return{module:It,providers:[r,t],exports:[r]}}async onApplicationShutdown(){const e=It.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 Nt;kt=It=Ee([S(),R({}),Ae(0,d(Ke)),be("design:paramtypes",[Object,Te])],kt);let Lt=Nt=class{static async forRootAsync(e){const{autoControllers:t,autoServices:r,handlers:o}=e,i=(await kt.bootPersistence(e)).map(e=>e.flavour),s=[kt.forRoot(e)];return t&&i.forEach(e=>{s.push(Tt(e).forRoot(e,{autoServices:r,handlers:o}))}),{module:Nt,imports:s}}};function Dt(e){const t=C.get(e);if(!t)throw new me("Failed to find repository for "+e);return j.forModel(t)}Lt=Nt=Ee([R({})],Lt);const Ft="##VERSION##",jt="##PACKAGE##";r.registerLibrary(jt,Ft);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,Rt 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,gt as DecafController,Ot as DecafExceptionFilter,lt as DecafHandlerExecutor,wt as DecafModelController,Lt as DecafModule,Ye as DecafParams,Je as DecafQuery,dt as DecafRequestContext,bt as DecafRequestHandlerInterceptor,pt as DecafRoleAuthHandler,Et as DtoFor,At as FromModelController,Qe as HttpVerbToDecorator,Ct as NestBootstraper,jt as PACKAGE_NAME,Pt as RequestToContextTransformer,at as Roles,_t as SwaggerBuilder,xt as UseDecafFilter,Ft as VERSION,Me as createApiPropertyDecorator,Fe as createPropertyDecorator,De as getEnumType,Le as getEnumValues,Tt as getModuleFor,qe as isOperationBlocked,Ne as isUndefined,Dt as repoForModel,vt as requestToContextTransformer,it as route};
1
+ import{Decoration as e,DecorationKeys as t,Metadata as r,apply as o,methodMetadata as s,metadata as i}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 b,SetMetadata as E,UseInterceptors as A,Query as P,Param as v,Response as T,Controller as R,Module as O,Catch as x,UseFilters as $,Logger as S,Global as _}from"@nestjs/common";import{ValidationKeys as C,Model as I}from"@decaf-ts/decorator-validation";import{PersistenceKeys as k,AuthorizationError as N,OrderDirection as L,ModelService as D,Service as j,ContextualLoggedClass as F,Repository as M,TransactionOperationKeys as q,Adapter as B,Context as U,PreparedStatementKeys as G,DefaultAdapterFlags as H,ForbiddenError as z,PersistenceService as Y}from"@decaf-ts/core";import{isArray as J,isString as Q,pickBy as K,negate as X}from"lodash";import{ApiExcludeEndpoint as V,ApiParam as W,ApiQuery as Z,ApiOperation as ee,ApiOkResponse as te,ApiNoContentResponse as re,OmitType as oe,ApiNotFoundResponse as se,ApiBody as ie,getSchemaPath as ne,ApiCreatedResponse as ae,ApiBadRequestResponse as ce,ApiUnprocessableEntityResponse as pe,ApiTags as de,ApiExtraModels as le,DocumentBuilder as ue,SwaggerModule as he}from"@nestjs/swagger";import{OperationKeys as fe,BulkCrudOperationKeys as me,InternalError as ye,DBKeys as ge,ValidationError as we,BaseError as be}from"@decaf-ts/db-decorators";import{__decorate as Ee,__param as Ae,__metadata as Pe}from"tslib";import{Reflector as ve,APP_INTERCEPTOR as Te,ModuleRef as Re}from"@nestjs/core";import{toPascalCase as Oe,Logging as xe,toKebabCase as $e,LoggedEnvironment as Se}from"@decaf-ts/logging";import{readFileSync as _e}from"fs";import*as Ce from"path";const Ie="swagger",ke={API_OPERATION:Ie+"/apiOperation",API_RESPONSE:Ie+"/apiResponse",API_PRODUCES:Ie+"/apiProduces",API_CONSUMES:Ie+"/apiConsumes",API_TAGS:Ie+"/apiUseTags",API_CALLBACKS:Ie+"/apiCallbacks",API_PARAMETERS:Ie+"/apiParameters",API_HEADERS:Ie+"/apiHeaders",API_MODEL_PROPERTIES:Ie+"/apiModelProperties",API_MODEL_PROPERTIES_ARRAY:Ie+"/apiModelPropertiesArray",API_SECURITY:Ie+"/apiSecurity",API_EXCLUDE_ENDPOINT:Ie+"/apiExcludeEndpoint",API_EXCLUDE_CONTROLLER:Ie+"/apiExcludeController",API_EXTRA_MODELS:Ie+"/apiExtraModels",API_EXTENSION:Ie+"/apiExtension",API_SCHEMA:Ie+"/apiSchema",API_DEFAULT_GETTER:Ie+"/apiDefaultGetter",API_LINK:Ie+"/apiLink"};function Ne(e,t){if(!e)return[e,t];if(t)return[e,t];const r=J(e);return[r?e[0]:e,r]}const Le=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 je(e){return e.filter(Q).length>0?"string":"number"}function Fe(e,t,r=!0){return(o,s)=>{const i=Reflect.getMetadata(ke.API_MODEL_PROPERTIES_ARRAY,o)||[],n=":"+s;i.includes(n)||Reflect.defineMetadata(ke.API_MODEL_PROPERTIES_ARRAY,[...i,":"+s],o);const a=Reflect.getMetadata(e,o,s);if(a){const i=K(t,X(Le)),n=r?{...a,...i}:{...i,...a};Reflect.defineMetadata(e,n,o,s)}else{const r=o?.constructor?._OPENAPI_METADATA_FACTORY?.()[s]?.type??Reflect.getMetadata("design:type",o,s);Reflect.defineMetadata(e,{type:r,...K(t,X(Le))},o,s)}}}function Me(e={}){return qe(e)}function qe(e={},t=!0){const[r,o]=Ne(e.type,e.isArray);if((s=e={...e,type:r,isArray:o}).isArray&&"enum"in s&&void 0!==s.enum){e.type="array";const t=De(e.enum);e.items={type:je(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=je(t)}var s;return Array.isArray(e.type)&&(e.type="array",e.items={type:"array",items:{type:e.type[0]}}),Fe(ke.API_MODEL_PROPERTIES,e,t)}function Be(e,t){const{handler:o,args:s}=r.get(e,fe.REFLECT+fe.BLOCK)||{};return!!o&&(o(...s,t)??!1)}function Ue(e,t,r){const s={GET:[fe.READ,l],POST:[fe.CREATE,u],PUT:[fe.UPDATE,h],PATCH:[fe.UPDATE,f],DELETE:[fe.DELETE,m]},[i,n]=s[t];return Be(e,i)?o(V()):o(n(r))}function Ge(e,t,r){const s={GET:[me.READ_ALL,l],POST:[me.CREATE_ALL,u],PUT:[me.UPDATE_ALL,h],PATCH:[me.UPDATE_ALL,f],DELETE:[me.DELETE_ALL,m]},[i,n]=s[t];return Be(e,i)?o(V()):o(n(r))}function He(e=[]){const t=e.map(e=>W({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(C.REQUIRED).extend(Me({required:!0})).apply(),e.for(C.MAX).extend({decorator:e=>Me({maximum:e})}).apply(),e.for(C.MIN).extend({decorator:e=>Me({minimum:e})}).apply(),e.for(C.MAX_LENGTH).extend({decorator:e=>Me({maxLength:e})}).apply(),e.for(C.MIN_LENGTH).extend({decorator:e=>Me({minLength:e})}).apply(),e.for(C.TYPE).extend({decorator:e=>(t,r)=>("function"!=typeof(e=Array.isArray(e)?e[0]:e)||e.name||(e=e()),Me({type:e})(t,r))}).apply(),e.for(C.DATE).extend({decorator:e=>Me({type:String,format:"date-time"})}).apply(),e.for(C.ENUM).extend({decorator:e=>Me({enum:Array.isArray(e)?e:Object.values(e)})}).apply(),e.for(C.PATTERN).extend({decorator:e=>Me({pattern:"string"==typeof e?e:e.source})}).apply(),e.for(k.COLUMN).extend({decorator:e=>Me({name:e})}).apply(),e.for(t.DESCRIPTION).extend({decorator:e=>Me({description:e})}).apply();const ze=g((e,t)=>{const r=t.switchToHttp().getRequest().body,o=t.getClass(),s=o.class;if(!s)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 s(e)):new s(r):r}),Ye=g((e,t)=>{const r=t.switchToHttp().getRequest(),o=r?.params??{},s=e??Object.keys(o),i=s.map(e=>o[e]);return{raw:o,valuesInOrder:i,keysInOrder:s}});function Je(e=[]){const t=e.map(e=>e.name);return Ye(t)}const Qe=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 Ke(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 Xe="DecafModuleOptions",Ve="DecafAdapter",We="DecafRoute",Ze=Symbol("DecafHandlers"),et=Symbol("DecafAdapterForOptions"),tt=Symbol("AUTH_HANDLER"),rt="auth:meta",ot="AuthRole",st=Symbol("decaf:context");function it(t,i){const n=We;return e.for(n).define({decorator:()=>(e,a,c)=>{const p={path:i,httpMethod:t,handler:c};return o(s(r.key(n,a),p))(e,a,c)},args:[]}).apply()}let nt=class{constructor(e,t){this.reflector=e,this.authHandler=t}async intercept(e,t){const r=this.reflector.get(rt,e.getHandler())??this.reflector.get(rt,e.getClass());return r&&this.authHandler&&await this.authHandler.authorize(e,r),t.handle()}};function at(e){const t="string"==typeof e?e:e.name;return y(E(rt,t),A(nt))}nt=Ee([c(),Ae(1,b()),Ae(1,d(tt)),Pe("design:paramtypes",[ve,Object])],nt);const ct=e=>i(ot,e);class pt{parseRequest(e){const t=e.headers.authorization?.split(" ")[1];return t}async authorize(e,t){const o=e.switchToHttp().getRequest(),s=this.parseRequest(o);if(!s)throw new N("Unauthenticated");if(!r.get(I.get(t),ot).includes(s))throw new N("Missing role: "+s)}}class dt extends pt{constructor(){super()}async authorize(e,t){const o=e.switchToHttp().getRequest(),s=this.parseRequest(o);if(!s)throw new N("Unauthenticated");const i=r.get(I.get(t),ot);if(!i.includes(s))throw new N("Missing role: "+s);return i}}let lt=class{put(e){let t;try{t=this.ctx.get("overrides")}catch(e){t={}}this._ctx=this.ctx.accumulate({overrides:Object.assign(t,e)})}applyCtx(e){this._ctx=e}get ctx(){if(!this._ctx)throw new ye("Context not initialized for request");return this._ctx}};lt=Ee([c({scope:p.REQUEST})],lt);let ut=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)}};ut=Ee([c({scope:p.REQUEST}),Ae(0,d(Ze)),Pe("design:paramtypes",[Array,lt])],ut);const ht=e=>({name:e,description:e+" parameter for the query",required:!0,type:String});function ft(e,t,r,o=!1){const s=Ke(r),i=(e=>e.split("/").filter(e=>e.startsWith(":")).map(e=>e.slice(1)))(t).map(ht),n=[];return"GET"===r&&o&&n.push(Z({name:"direction",required:!1,enum:L,description:"the sort order when applicable"}),Z({name:"limit",required:!1,description:"limit or page size when applicable"}),Z({name:"offset",required:!1,description:"offset or bookmark when applicable"})),{method:[s(t),...i.map(W),...n,ee({summary:`Retrieve records using according to "${e}".`}),te({description:"Result successfully retrieved."}),re({description:"No content returned by the method."})],params:[Je(i),P()]}}function mt(e,t,r,o){const s=e?.prototype??e;o.method.forEach(e=>e(s,t,r)),o.params?.forEach((e,r)=>e(s,t,r))}function yt(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:s,limit:i,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,s,i,n)}catch(t){throw o.error(`Custom query "${e}" failed`,t),t}}}function gt(e,t,r){return Object.defineProperty(e.prototype||e,t,{value:r,writable:!1}),Object.getOwnPropertyDescriptor(e.prototype||e,t)}class wt extends j{constructor(e,t){super(t),this.clientContext=e}logCtx(e,t,r=!1,o){const s=this.clientContext.ctx;return e=e.filter(e=>void 0!==e),F.logCtx.call(this,t,o||{},r,...e,s)}}class bt extends wt{persistence(e){if(!this._persistence)try{this._persistence=D.getService(this.class)}catch(e){this._persistence=M.forModel(this.class)}return e?this._persistence instanceof M?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 s={};try{s=o.get("overrides")}catch(e){}const i=this.persistence(o);let n,a;return i instanceof D?n=i.repo.adapter:i instanceof M?n=i.adapter:i.context&&(n=i),r?n.logCtx(e,t,!0,s).then(e=>e):(a=n.logCtx(e,t,!1,s),a)}}function Et(e,t){if(!q.includes(e))return t;const o=[fe.UPDATE,me.UPDATE_ALL].includes(e),s=r.properties(t)||[],i=I.relations(t)||[];let n=s.filter(e=>I.generated(t,e));o&&(n=n.filter(e=>e!==I.pk(t)));class a extends(oe(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:`${Oe(t.name)}${Oe(e)}DTO`});for(const o of i){let s=r.allowedTypes(t,o);if(s=s?Array.isArray(s)?s[0]:s:void 0,s="function"!=typeof s||s.name?s:s(),!s)throw new ye(`Type for relation ${o} not found`);if(I.get(s.name)){const i=r.validationFor(t,o);c(o,Et(e,s),!!i[C.LIST])}}return a}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),U.prototype.toResponse=function(e){const t=this.pending();return t&&e.header("x-pending-task",JSON.stringify(t)),e};class At{static{this.log=xe.for(At.name)}static getPersistence(e){try{return D.getService(e)}catch(t){return M.forModel(e)}}static createQueryRoutesFromRepository(e,t=k.QUERY){const o=At.log.for(At.createQueryRoutesFromRepository),s=e instanceof D?e.repo:e,i=s.class,n=r.get(s.constructor,r.key(k.QUERY))??{},a=r.get(e.constructor,r.key(We))??{};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("/"),s=yt(e);if(!s){const t=`Invalid or missing handler for model ${i.name} on decorated method ${e}`;throw o.error(t),Error(t)}const n=gt(c,e,s);n&&mt(c,e,n,ft(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("/"),s=gt(c,e,yt(e));s&&mt(c,e,s,ft(e,o,"GET",!0))}return c}static create(e){const t=At.log.for(At.create),r=I.tableName(e),o=$e(r),s=e.name,i=At.getPersistence(e),{description:n,getPK:a,apiProperties:c,path:p}=At.getRouteParametersFromModel(e);t.debug("Creating controller for model: "+s);const d=At.createQueryRoutesFromRepository(i);let l=class extends d{static get class(){return e}get class(){return e}constructor(r){super(r),this.pk=I.pk(e),t.info(`Registering dynamic controller for model: ${this.class.name} route: /${o}`)}async listBy(e,t){const{ctx:r}=(await this.logCtx([],G.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([],G.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([],G.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([],G.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([],k.STATEMENT,!0)).for(this.statement),{direction:s,offset:i,limit:n,bookmark:a}=r;switch(t=t.map(e=>("string"==typeof e?parseInt(e):e)||e),e){case G.FIND_BY:break;case G.LIST_BY:t.push(s);break;case G.PAGE_BY:t=[t[0],s,{limit:n,offset:i,bookmark:a}];case G.FIND_ONE_BY:}return this.persistence(o).statement(e,...t,o)}async createAll(t,r){const{ctx:o,log:i}=(await this.logCtx([],me.CREATE_ALL,!0)).for(this.createAll);let n;i.verbose("creating new "+s);try{n=await this.persistence(o).createAll(t.map(t=>new e(t)),o)}catch(e){throw i.error("Failed to create new "+s,e),e}return i.info(`created new ${s} with id ${n[this.pk]}`),o.toResponse(r),n}async create(e,t){const{ctx:r,log:o}=(await this.logCtx([],fe.CREATE,!0)).for(this.create);let i;o.verbose("creating new "+s);try{const t=this.persistence(r);i=await t.create(e,r)}catch(e){throw o.error("Failed to create new "+s,e),e}return o.info(`created new ${s} with id ${i[this.pk]}`),r.toResponse(t),i}async readAll(e){const{ctx:t,log:r}=(await this.logCtx([],me.READ_ALL,!0)).for(this.readAll);let o;try{r.debug(`reading ${e.length} ${s}: ${e}`);const i=this.persistence(t);o=await i.readAll(e,t)}catch(t){throw r.error(`Failed to ${s} with id ${e}`,t),t}return r.info(`read ${o.length} ${s}`),o}async read(e){const{ctx:t,log:r}=(await this.logCtx([],fe.READ,!0)).for(this.read),o=a(...e.valuesInOrder);if(void 0===o)throw new we(`No ${this.pk} provided`);let i;try{r.debug(`reading ${s} with ${this.pk} ${o}`);const e=this.persistence(t);i=await e.read(o,t)}catch(e){throw r.error(`Failed to read ${s} with id ${o}`,e),e}return r.info(`read ${s} with id ${i[this.pk]}`),i}async updateAll(e,t){const{ctx:r,log:o}=(await this.logCtx([],me.UPDATE_ALL,!0)).for(this.updateAll);let i;try{o.info(`updating ${e.length} ${s}`);const t=e.map(e=>JSON.parse(JSON.stringify(e)));i=await this.persistence(r).updateAll(t,r)}catch(e){throw o.error(e),e}return r.toResponse(t),i}async update(t,r,o){const{ctx:i,log:n}=(await this.logCtx([],fe.UPDATE,!0)).for(this.update),c=a(...t.valuesInOrder);if(void 0===c)throw new we(`No ${this.pk} provided`);let p;try{n.info(`updating ${s} with ${this.pk} ${c}`);const t=JSON.parse(JSON.stringify(r)),o=this.persistence(i);p=await o.update(new e({...t,[this.pk]:c}),i)}catch(e){throw n.error(e),e}return i.toResponse(o),p}async deleteAll(e,t){const{ctx:r,log:o}=(await this.logCtx([],me.DELETE_ALL,!0)).for(this.deleteAll);let i;try{o.debug(`deleting ${e.length} ${s}: ${e}`),i=await this.persistence(r).deleteAll(e,r)}catch(t){throw o.error(`Failed to delete ${s} with id ${e}`,t),t}return o.info(`deleted ${i.length} ${s}`),r.toResponse(t),i}async delete(e,t){const{ctx:r,log:o}=(await this.logCtx([],fe.DELETE,!0)).for(this.delete),i=a(...e.valuesInOrder);if(void 0===i)throw new we(`No ${this.pk} provided`);let n;try{o.debug(`deleting ${s} with ${this.pk} ${i}`),n=await this.persistence(r).delete(i,r)}catch(e){throw o.error(`Failed to delete ${s} with id ${i}`,e),e}return o.info(`deleted ${s} with id ${i}`),r.toResponse(t),n}};return Ee([Ue(e,"GET","listBy/:key"),ee({summary:`Retrieve ${s} records by query.`}),W({name:"key",description:"the model key to sort by"}),Z({name:"direction",required:!0,enum:L}),te({description:s+" listed successfully."}),Ae(1,Qe()),Pe("design:type",Function),Pe("design:paramtypes",[String,Object]),Pe("design:returntype",Promise)],l.prototype,"listBy",null),Ee([Ue(e,"GET","paginateBy/:key/:page"),ee({summary:`Retrieve ${s} records by query.`}),W({name:"key",description:"the model key to sort by"}),W({name:"page",description:"the page to retrieve or the bookmark"}),Z({name:"direction",required:!0,enum:L,description:"the sort order"}),Z({name:"limit",required:!0,description:"the page size"}),Z({name:"offset",description:"the bookmark when necessary"}),te({description:s+" listed paginated."}),Ae(0,v("key")),Ae(1,Qe()),Pe("design:type",Function),Pe("design:paramtypes",[String,Object]),Pe("design:returntype",Promise)],l.prototype,"paginateBy",null),Ee([Ue(e,"GET","findOneBy/:key"),ee({summary:`Retrieve ${s} records by query.`}),W({name:"key",description:"the model key to sort by"}),te({description:s+" listed found."}),se({description:`No ${s} record matches the provided identifier.`}),Ae(0,v("key")),Ae(1,v("value")),Pe("design:type",Function),Pe("design:paramtypes",[String,Object]),Pe("design:returntype",Promise)],l.prototype,"findOneBy",null),Ee([Ue(e,"GET","findBy/:key/:value"),ee({summary:`Retrieve ${s} records by query.`}),W({name:"key",description:"the model key to compare"}),W({name:"value",description:"the value to match"}),Z({name:"direction",required:!0,enum:L,description:"the sort order when applicable"}),te({description:s+" listed found."}),se({description:`No ${s} record matches the provided identifier.`}),Ae(0,v("key")),Ae(1,v("value")),Ae(2,Qe()),Pe("design:type",Function),Pe("design:paramtypes",[String,Object,Object]),Pe("design:returntype",Promise)],l.prototype,"findBy",null),Ee([Ue(e,"GET","statement/:method/*args"),ee({summary:`Executes a prepared statement on ${s}.`}),W({name:"method",description:"the prepared statement to execute"}),W({name:"args",description:"concatenated list of arguments the prepared statement can accept"}),Z({name:"direction",required:!0,enum:L,description:"the sort order when applicable"}),Z({name:"limit",required:!0,description:"limit or page size when applicable"}),Z({name:"offset",required:!0,description:"offset or bookmark when applicable"}),te({description:s+" listed found."}),se({description:`No ${s} record matches the provided identifier.`}),Ae(0,v("method")),Ae(1,v("args")),Ae(2,Qe()),Pe("design:type",Function),Pe("design:paramtypes",[String,Array,Object]),Pe("design:returntype",Promise)],l.prototype,"statement",null),Ee([Ue(e,"POST","bulk"),ee({summary:`Create a new ${s}.`}),ie({description:"Payload for "+s,schema:{type:"array",items:{$ref:ne(e)}}}),ae({description:s+" created successfully.",schema:{type:"array",items:{$ref:ne(e)}}}),ce({description:"Payload validation failed."}),pe({description:"Repository rejected the provided payload."}),Ae(0,ze()),Ae(1,T({passthrough:!0})),Pe("design:type",Function),Pe("design:paramtypes",[Array,Object]),Pe("design:returntype",Promise)],l.prototype,"createAll",null),Ee([Ue(e,"POST"),ee({summary:`Create a new ${s}.`}),ie({description:"Payload for "+s,type:Et(fe.CREATE,e)}),ae({description:s+" created successfully.",schema:{$ref:ne(e)}}),ce({description:"Payload validation failed."}),pe({description:"Repository rejected the provided payload."}),Ae(0,ze()),Ae(1,T({passthrough:!0})),Pe("design:type",Function),Pe("design:paramtypes",[Object,Object]),Pe("design:returntype",Promise)],l.prototype,"create",null),Ee([Ue(e,"GET","bulk"),ee({summary:`Retrieve a ${s} record by id.`}),Z({name:"ids",required:!0,type:"array"}),te({description:s+" retrieved successfully.",schema:{type:"array",items:{$ref:ne(e)}}}),se({description:`No ${s} record matches the provided identifier.`}),Ae(0,P("ids")),Pe("design:type",Function),Pe("design:paramtypes",[Array]),Pe("design:returntype",Promise)],l.prototype,"readAll",null),Ee([Ue(e,"GET",p),He(c),ee({summary:`Retrieve a ${s} record by id.`}),te({description:s+" retrieved successfully.",schema:{$ref:ne(e)}}),se({description:`No ${s} record matches the provided identifier.`}),Ae(0,Je(c)),Pe("design:type",Function),Pe("design:paramtypes",[Object]),Pe("design:returntype",Promise)],l.prototype,"read",null),Ee([Ue(e,"PUT","bulk"),He(c),ee({summary:`Replace an existing ${s} record with a new payload.`}),ie({description:"Payload for replace a existing record of "+s,schema:{type:"array",items:{$ref:ne(e)}}}),ae({description:s+" updated successfully.",schema:{type:"array",items:{$ref:ne(e)}}}),se({description:`No ${s} record matches the provided identifier.`}),ce({description:"Payload validation failed."}),Ae(0,ze()),Ae(1,T({passthrough:!0})),Pe("design:type",Function),Pe("design:paramtypes",[Array,Object]),Pe("design:returntype",Promise)],l.prototype,"updateAll",null),Ee([Ue(e,"PUT",p),He(c),ee({summary:`Replace an existing ${s} record with a new payload.`}),ie({description:"Payload for replace a existing record of "+s,schema:{$ref:ne(e)}}),te({description:s+" updated successfully."}),se({description:`No ${s} record matches the provided identifier.`}),ce({description:"Payload validation failed."}),Ae(0,Je(c)),Ae(1,ze()),Ae(2,T({passthrough:!0})),Pe("design:type",Function),Pe("design:paramtypes",[Object,Object,Object]),Pe("design:returntype",Promise)],l.prototype,"update",null),Ee([Ue(e,"DELETE","bulk"),He(c),ee({summary:`Retrieve a ${s} record by id.`}),Z({name:"ids",required:!0,type:"array"}),te({description:s+" retrieved successfully."}),se({description:`No ${s} record matches the provided identifier.`}),Ae(0,P("ids")),Ae(1,T({passthrough:!0})),Pe("design:type",Function),Pe("design:paramtypes",[Array,Object]),Pe("design:returntype",Promise)],l.prototype,"deleteAll",null),Ee([Ue(e,"DELETE",p),He(c),ee({summary:`Delete a ${s} record by id.`}),te({description:s+" record deleted successfully."}),se({description:`No ${s} record matches the provided identifier.`}),Ae(0,Je(c)),Ae(1,T({passthrough:!0})),Pe("design:type",Function),Pe("design:paramtypes",[Object,Object]),Pe("design:returntype",Promise)],l.prototype,"delete",null),l=Ee([R(o),de(s),le(e),at(e),Pe("design:paramtypes",[lt])],l),l}static getRouteParametersFromModel(e){const t=I.pk(e),o=r.get(e,r.key(ge.COMPOSED,t)),s=o?.args??[],i=Array.isArray(s)&&s.length>0?Array.from(new Set([...s])):Array.from(new Set([t])),n=r.description(e);return{path:":"+i.join("/:"),description:n,apiProperties:i.map(t=>({name:t,description:r.description(e,t),required:!0,type:String})),getPK:(...e)=>o?.separator?e.join(o.separator):e.join("")}}}let Pt=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),s=await r.from(e);Object.assign(t.overrides,s)}catch(e){throw new ye("Failed to contextualize request: "+e)}return(new U).accumulate(Object.assign({},H,{logger:xe.get(),timestamp:new Date},t))}async intercept(e,t){const r=e.switchToHttp().getRequest(),o=e.switchToHttp().getResponse(),s=await this.contextualize(r);return this.requestContext.applyCtx(s),await this.executor.exec(r,o),t.handle()}};Pt=Ee([c({scope:p.REQUEST}),Pe("design:paramtypes",[lt,ut])],Pt);class vt{}function Tt(e){return t=>(r.set("transformers",e,t),"function"==typeof t?i("transformers",e)(t):t)}function Rt(e){var t;let r=class{static{t=this}static{this.log=xe.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 s=B.models(e);let i=[];r.autoServices&&(o.info("Auto-services enabled. Initializing service generation."),i=this.createModelServices(s),o.info(`Auto-services completed. ${i.length} services initialized.`));const n=s.map(At.create);return o.info(`Generated ${n.length} controllers`),{module:t,controllers:n,providers:[{provide:Ze,useFactory:()=>r.handlers?.map(e=>(o.info("Registered request handler: "+e.name),new e))??[]},lt,ut,{provide:Te,useClass:Pt},...i]}}};return r=t=Ee([O({})],r),Object.assign(r,"name",{value:"DecafModule"+e}),r}class Ot extends z{constructor(e){super(e,Ot.name)}}let xt=class{catch(e,t){const r=t.switchToHttp(),o=r.getResponse(),s=r.getRequest(),i="production"===Se.env;e instanceof be||(e=new ye(e.message)),o.status(e.code).json({status:e.code,error:i?e.name:e.message,timestamp:(new Date).toISOString(),path:s.url,method:s.method})}};function $t(){return $(new xt)}xt=Ee([x()],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=Ce.join(this.options.assetsPath||"",e),o=_e(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 ue).setTitle(this.options.title).setDescription(e).setVersion(this.options.version||"0.0.1").addBearerAuth(this.options.auth||St.auth).build();return he.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});he.setup(this.options.path||St.path,this.app,e,{...t.getCustomOptions()})}}class It{static get logger(){return this._logger||(this._logger=new S("NestBootstrap")),this._logger}static initialize(e){return this.app=e,this}static enableLogger(e){return this._logger=e||new S("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 ye("Persistence service not initialized");return this._persistence}static get log(){return this._logger||(this._logger=xe.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 Y,await this._persistence.boot(r);const o=this._persistence.client;for(let t=0;t<o.length;t++){const r=e.conf[t];let[,,s]=r;if(!s){const e=B.transformerFor(o[t].flavour);if(!e)throw new ye(`No transformer found for flavour ${o[t].flavour}. you should either @requestToContextTransformer or provide a transformer in the config`);s=e instanceof vt?e:new e}Tt(o[t].flavour)(s)}t.info("persistence layer created successfully!")}return this.persistence.client}static forRoot(e){const t={provide:Xe,useValue:e},r={useFactory:async e=>kt.bootPersistence(e),provide:Ve,durable:!0,scope:p.DEFAULT,inject:[Xe]};return{module:kt,providers:[r,t],exports:[r]}}async onApplicationShutdown(){const e=kt.log.for(this.onApplicationShutdown),t=this.moduleRef.get(Ve);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 Lt;Nt=kt=Ee([_(),O({}),Ae(0,d(Xe)),Pe("design:paramtypes",[Object,Re])],Nt);let Dt=Lt=class{static async forRootAsync(e){const{autoControllers:t,autoServices:r,handlers:o}=e,s=(await Nt.bootPersistence(e)).map(e=>e.flavour),i=[Nt.forRoot(e)];return t&&s.forEach(e=>{i.push(Rt(e).forRoot(e,{autoServices:r,handlers:o}))}),{module:Lt,imports:i}}};function jt(e){const t=I.get(e);if(!t)throw new ye("Failed to find repository for "+e);return M.forModel(t)}Dt=Lt=Ee([O({})],Dt);const Ft="##VERSION##",Mt="##PACKAGE##";r.registerLibrary(Mt,Ft);export{tt as AUTH_HANDLER,rt as AUTH_META_KEY,Ue as ApiOperationFromModel,He as ApiParamsFromModel,Me as ApiProperty,at as Auth,nt as AuthInterceptor,ot as AuthRole,Ge as BulkApiOperationFromModel,Ot as CorsError,Ve as DECAF_ADAPTER_ID,et as DECAF_ADAPTER_OPTIONS,st as DECAF_CONTEXT_KEY,Ze as DECAF_HANDLERS,Xe as DECAF_MODULE_OPTIONS,We as DECAF_ROUTE,ke as DECORATORS,Ie as DECORATORS_PREFIX,pt as DecafAuthHandler,ze as DecafBody,wt as DecafController,xt as DecafExceptionFilter,ut as DecafHandlerExecutor,bt as DecafModelController,Dt as DecafModule,Je as DecafParams,Qe as DecafQuery,lt as DecafRequestContext,Pt as DecafRequestHandlerInterceptor,dt as DecafRoleAuthHandler,Et as DtoFor,At as FromModelController,Ke as HttpVerbToDecorator,It as NestBootstraper,Mt as PACKAGE_NAME,vt as RequestToContextTransformer,ct as Roles,Ct as SwaggerBuilder,$t as UseDecafFilter,Ft as VERSION,qe as createApiPropertyDecorator,Fe as createPropertyDecorator,je as getEnumType,De as getEnumValues,Rt as getModuleFor,Be as isOperationBlocked,Le as isUndefined,jt as repoForModel,Tt as requestToContextTransformer,it as route};
2
2
  //# sourceMappingURL=for-nest.js.map