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