UNPKG

express-cargo

Version:

express middleware for class-based request parsing

118 lines (117 loc) 3.51 kB
function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } import 'reflect-metadata'; export class CargoClassMetadata { getMetadataKey(propertyKey) { return `cargo:${String(propertyKey)}`; } getFieldKey() { return `cargo:fields`; } getFieldMetadata(propertyKey) { const metadataKey = this.getMetadataKey(propertyKey); return Reflect.getMetadata(metadataKey, this.target) || new CargoFieldMetadata(this.target, propertyKey); } setFieldMetadata(propertyKey, meta) { const metaKey = this.getMetadataKey(propertyKey); Reflect.defineMetadata(metaKey, meta, this.target); } getFieldList() { const fields = new Set(); let current = this.target; while(current && current !== Object.prototype){ const currentFields = Reflect.getMetadata(this.getFieldKey(), current) || []; currentFields.forEach((f)=>fields.add(f)); current = Object.getPrototypeOf(current); } return Array.from(fields); } setFieldList(propertyKey) { const existing = this.getFieldList(); if (!existing.includes(propertyKey)) { Reflect.defineMetadata(this.getFieldKey(), [ ...existing, propertyKey ], this.target); } } constructor(target){ _define_property(this, "target", void 0); this.target = target; } } export class CargoFieldMetadata { getKey() { return this.key; } setKey(key) { this.key = key; } getSource() { return this.source; } setSource(source) { this.source = source; } getValidators() { return this.validators; } addValidator(rule) { this.validators.push(rule); } getOptional() { return this.optional; } setOptional(optional) { this.optional = optional; } getTransformer() { return this.transformer; } setTransformer(transformer) { this.transformer = transformer; } getRequestTransformer() { return this.requestTransformer; } setRequestTransformer(transformer) { this.requestTransformer = transformer; } getVirtualTransformer() { return this.virtualTransformer; } setVirtualTransformer(transformer) { this.virtualTransformer = transformer; } constructor(target, key){ _define_property(this, "target", void 0); _define_property(this, "type", void 0); _define_property(this, "key", void 0); _define_property(this, "source", void 0); _define_property(this, "optional", void 0); _define_property(this, "validators", void 0); _define_property(this, "transformer", void 0); _define_property(this, "requestTransformer", void 0); _define_property(this, "virtualTransformer", void 0); this.target = target; this.type = Reflect.getMetadata('design:type', target, key); this.key = key; this.source = 'body'; this.validators = []; this.optional = false; this.transformer = undefined; this.requestTransformer = undefined; this.virtualTransformer = undefined; } }