@decaf-ts/db-decorators 0.7.4 → 0.7.5
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/db-decorators.cjs +1 -1
- package/dist/db-decorators.cjs.map +1 -1
- package/dist/db-decorators.js +1 -1
- package/dist/db-decorators.js.map +1 -1
- package/lib/esm/interfaces/BulkCrudOperator.d.ts +5 -4
- package/lib/esm/interfaces/Contextual.d.ts +3 -3
- package/lib/esm/interfaces/CrudOperator.d.ts +5 -4
- package/lib/esm/interfaces/IRepository.d.ts +2 -4
- package/lib/esm/model/decorators.d.ts +4 -5
- package/lib/esm/model/decorators.js.map +1 -1
- package/lib/esm/operations/Operations.d.ts +3 -7
- package/lib/esm/operations/Operations.js +1 -3
- package/lib/esm/operations/Operations.js.map +1 -1
- package/lib/esm/operations/OperationsRegistry.d.ts +2 -6
- package/lib/esm/operations/OperationsRegistry.js +0 -2
- package/lib/esm/operations/OperationsRegistry.js.map +1 -1
- package/lib/esm/operations/decorators.d.ts +42 -28
- package/lib/esm/operations/decorators.js +34 -11
- package/lib/esm/operations/decorators.js.map +1 -1
- package/lib/esm/operations/types.d.ts +9 -10
- package/lib/esm/overrides/Model.d.ts +16 -4
- package/lib/esm/overrides/overrides.js +21 -0
- package/lib/esm/overrides/overrides.js.map +1 -1
- package/lib/esm/repository/BaseRepository.d.ts +16 -27
- package/lib/esm/repository/BaseRepository.js +2 -28
- package/lib/esm/repository/BaseRepository.js.map +1 -1
- package/lib/esm/repository/Context.d.ts +9 -8
- package/lib/esm/repository/Context.js +9 -1
- package/lib/esm/repository/Context.js.map +1 -1
- package/lib/esm/repository/Repository.d.ts +9 -6
- package/lib/esm/repository/Repository.js +52 -38
- package/lib/esm/repository/Repository.js.map +1 -1
- package/lib/esm/repository/constants.d.ts +1 -1
- package/lib/esm/repository/constants.js +2 -0
- package/lib/esm/repository/constants.js.map +1 -1
- package/lib/esm/repository/types.d.ts +16 -2
- package/lib/esm/repository/utils.d.ts +6 -32
- package/lib/esm/repository/utils.js +9 -106
- package/lib/esm/repository/utils.js.map +1 -1
- package/lib/esm/validation/decorators.d.ts +4 -5
- package/lib/esm/validation/decorators.js.map +1 -1
- package/lib/interfaces/BulkCrudOperator.d.ts +5 -4
- package/lib/interfaces/Contextual.d.ts +3 -3
- package/lib/interfaces/CrudOperator.d.ts +5 -4
- package/lib/interfaces/IRepository.d.ts +2 -4
- package/lib/model/decorators.d.ts +4 -5
- package/lib/model/decorators.js.map +1 -1
- package/lib/operations/Operations.cjs +1 -3
- package/lib/operations/Operations.d.ts +3 -7
- package/lib/operations/Operations.js.map +1 -1
- package/lib/operations/OperationsRegistry.cjs +0 -2
- package/lib/operations/OperationsRegistry.d.ts +2 -6
- package/lib/operations/OperationsRegistry.js.map +1 -1
- package/lib/operations/decorators.cjs +36 -12
- package/lib/operations/decorators.d.ts +42 -28
- package/lib/operations/decorators.js.map +1 -1
- package/lib/operations/types.d.ts +9 -10
- package/lib/overrides/Model.d.ts +16 -4
- package/lib/overrides/overrides.cjs +21 -0
- package/lib/overrides/overrides.js.map +1 -1
- package/lib/repository/BaseRepository.cjs +2 -28
- package/lib/repository/BaseRepository.d.ts +16 -27
- package/lib/repository/BaseRepository.js.map +1 -1
- package/lib/repository/Context.cjs +9 -1
- package/lib/repository/Context.d.ts +9 -8
- package/lib/repository/Context.js.map +1 -1
- package/lib/repository/Repository.cjs +51 -37
- package/lib/repository/Repository.d.ts +9 -6
- package/lib/repository/Repository.js.map +1 -1
- package/lib/repository/constants.cjs +2 -0
- package/lib/repository/constants.d.ts +1 -1
- package/lib/repository/constants.js.map +1 -1
- package/lib/repository/types.d.ts +16 -2
- package/lib/repository/utils.cjs +10 -108
- package/lib/repository/utils.d.ts +6 -32
- package/lib/repository/utils.js.map +1 -1
- package/lib/validation/decorators.d.ts +4 -5
- package/lib/validation/decorators.js.map +1 -1
- package/package.json +11 -10
package/README.md
CHANGED
package/dist/db-decorators.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e,t;e=this,t=function(e,t,a,r,o){"use strict";const s={REFLECT:a.ModelKeys.MODEL+".persistence.",REPOSITORY:"repository",CLASS:"_class",ID:"id",INDEX:"index",UNIQUE:"unique",SERIALIZE:"serialize",READONLY:"readonly",TIMESTAMP:"timestamp",TRANSIENT:"transient",HASH:"hash",COMPOSED:"composed",VERSION:"version",ORIGINAL:"__originalObj"},n="_",i="dd/MM/yyyy HH:mm:ss:S",c={ID:{INVALID:"This Id is invalid",REQUIRED:"The Id is mandatory"},READONLY:{INVALID:"This cannot be updated"},TIMESTAMP:{REQUIRED:"Timestamp is Mandatory",DATE:"The Timestamp must the a valid date",INVALID:"This value must always increase"}},l={REFLECT:"db.update.validation.",TIMESTAMP:s.TIMESTAMP,READONLY:s.READONLY};e.ReadOnlyValidator=class extends a.Validator{constructor(){super(c.READONLY.INVALID)}hasErrors(e,...t){}updateHasErrors(e,t,r){if(void 0!==e)return a.isEqual(e,t)?void 0:this.getMessage(r||this.message)}},e.ReadOnlyValidator=r.__decorate([a.validator(l.READONLY),r.__metadata("design:paramtypes",[])],e.ReadOnlyValidator),e.TimestampValidator=class extends a.Validator{constructor(){super(c.TIMESTAMP.INVALID)}hasErrors(e,...t){}updateHasErrors(e,t,a){if(void 0!==e){a=a||this.getMessage(a||this.message);try{e=new Date(e),t=new Date(t)}catch(e){return a}return e>t?void 0:a}}},e.TimestampValidator=r.__decorate([a.validator(l.TIMESTAMP),r.__metadata("design:paramtypes",[])],e.TimestampValidator);class d extends a.Validator{constructor(e=a.DEFAULT_ERROR_MESSAGES.DEFAULT,...t){super(e,...t)}}var p,u,y;a.Validation.updateKey=e=>l.REFLECT+e,e.OperationKeys=void 0,(p=e.OperationKeys||(e.OperationKeys={})).REFLECT="decaf.model.db.operations.",p.CREATE="create",p.READ="read",p.UPDATE="update",p.DELETE="delete",p.ON="on.",p.AFTER="after.",p.BLOCK="block",e.ModelOperations=void 0,(u=e.ModelOperations||(e.ModelOperations={})).OPERATIONS="operations",u.RELATIONS="relations",e.BulkCrudOperationKeys=void 0,(y=e.BulkCrudOperationKeys||(e.BulkCrudOperationKeys={})).CREATE_ALL="createAll",y.READ_ALL="readAll",y.UPDATE_ALL="updateAll",y.DELETE_ALL="deleteAll";const h={CREATE:[e.OperationKeys.CREATE],READ:[e.OperationKeys.READ],UPDATE:[e.OperationKeys.UPDATE],DELETE:[e.OperationKeys.DELETE],CREATE_UPDATE:[e.OperationKeys.CREATE,e.OperationKeys.UPDATE],READ_CREATE:[e.OperationKeys.READ,e.OperationKeys.CREATE],ALL:[e.OperationKeys.CREATE,e.OperationKeys.READ,e.OperationKeys.UPDATE,e.OperationKeys.DELETE]};class f{constructor(){this.cache={}}get(e,t,a,r){let o;r=r||[];try{o="string"==typeof e?e:e.constructor.name,r.unshift(...Object.values(this.cache[o][t][a]||[]))}catch(t){if("string"==typeof e||e===Object.prototype||Object.getPrototypeOf(e)===Object.prototype)return r}let s=Object.getPrototypeOf(e);return s.constructor.name===o&&(s=Object.getPrototypeOf(s)),this.get(s,t,a,r)}register(e,t,a,r){const o=a.constructor.name,s=E.getHandlerName(e);this.cache[o]||(this.cache[o]={}),this.cache[o][r]||(this.cache[o][r]={}),this.cache[o][r][t]||(this.cache[o][r][t]={}),this.cache[o][r][t][s]||(this.cache[o][r][t][s]=e)}}class E{constructor(){}static getHandlerName(e){return e.name?e.name:a.Hashing.hash(e.toString())}static key(t){return e.OperationKeys.REFLECT+t}static get(e,t,a){return E.registry.get(e,t,a)}static getOpRegistry(){return E.registry||(E.registry=new f),E.registry}static register(e,t,a,r){E.getOpRegistry().register(e,t,a,r)}}class O extends Error{constructor(e,t,a){if(t instanceof O)return t;super(`[${e}] ${t instanceof Error?t.message:t}`),this.code=a,t instanceof Error&&(this.stack=t.stack)}}class m extends O{constructor(e,t=m.name,a=400){super(t,e,a)}}class A extends m{constructor(e){super(e,A.name,422)}}class g extends O{constructor(e,t=g.name,a=500){super(t,e,a)}}class T extends g{constructor(e){super(e,T.name,500)}}class w extends m{constructor(e){super(e,w.name,404)}}class P extends m{constructor(e){super(e,P.name,409)}}const D=(e,t,a,r)=>{const o=a.constructor.name;if(!o)throw new g("Could not determine model class");r=r||{},e.props.handlers[o]&&e.props.handlers[o][t]&&(r={...e.props.handlers[o][t],...r});let s=Object.getPrototypeOf(a);return s===Object.prototype?r:(s.constructor.name===o&&(s=Object.getPrototypeOf(s)),D(e,t,s,r))};async function M(t,a,r,o,s,n){const i=R(r,o,s);if(!i)return;const c=L(S(v(r,i,s)));for(const i of c){const c=[a,i.data.length>1?i.data:i.data[0],i.prop.length>1?i.prop:i.prop[0],r];if(o===e.OperationKeys.UPDATE&&s===e.OperationKeys.ON){if(!n)throw new g("Missing old model for update operation");c.push(n)}try{await i.handler.apply(t,c)}catch(e){const t=`Failed to execute handler ${i.handler.name} for ${i.prop} on ${r.constructor.name} due to error: ${e}`;if(a.get("breakOnHandlerError"))throw new g(t)}}}function R(a,r,o){const s=o?.replace(/[.]$/,""),n=t.Metadata.get(a.constructor,e.ModelOperations.OPERATIONS);if(n)return Object.keys(n).reduce((e,t)=>{const a=s?n[t][s]||{}:n[t],o=Object.keys(a).filter(e=>e===r),i=[];for(const e of o)i.push({key:e,props:a[e]});return i&&i.length&&(e||(e={}),e[t]=i),e},void 0)}const K=50,b={priority:K};function v(e,t,a){const r=[];for(const o in t){const s=t[o];for(const t of s){const{key:s}=t,n=E.get(e,o,a+s);if(!n||!n.length)throw new g(`Could not find registered handler for the operation ${a+s} under property ${o}`);const i=D(t,o,e);if(!i||Object.values(i).length!==n.length)throw new g("Args and handlers length do not match");for(let e=0;e<n.length;e++){const t=i[n[e].name].data;r.push({handler:n[e],data:[t],prop:[o]})}}}return r}function S(e){const t=e.reduce((e,t)=>{if(!t||!t.data||!t.prop)throw new g("Missing decorator properties or data");if(!t.data[0].group)return e.set(Symbol(),t),e;const a=t.data[0].group;if(e.has(a)){const r=e.get(a);e.set(a,{handler:r.handler,data:[...r.data,...t.data],prop:[...r.prop,...t.prop]})}else e.set(a,{...t});return e},new Map),a=Array.from(t.values());return a.forEach(e=>{const t=e.data.map((t,a)=>({data:t,prop:e.prop[a]}));t.sort((e,t)=>(e.data.groupPriority??50)-(t.data.groupPriority??50)),e.data=t.map(e=>e.data),e.prop=t.map(e=>e.prop)}),a}function L(e){return e.sort((e,t)=>(e.data[0].priority??K)-(t.data[0].priority??K)),e}function x(e,t,a){return k(h.CREATE_UPDATE,e,t,a)}function I(e,t,a){return k(h.UPDATE,e,t,a)}function N(e,t,a){return k(h.CREATE,e,t,a)}function k(t=h.ALL,a,r,o){return U(e.OperationKeys.ON,t,a,r,o)}function C(t=h.ALL,a,r,o){return U(e.OperationKeys.AFTER,t,a,r,o)}function U(a,r=h.ALL,o,s,n=b){return(i,c)=>{const l=i.constructor.name,d=r.reduce((r,d)=>{const p=a+d;let u=t.Metadata.readOperation(i.constructor,c,p);u||(u={operation:d,handlers:{}});const y=E.getHandlerName(o);let h=n;if(s){if(Object.keys(s).filter(e=>e in n).length>0)throw new g("Unable to merge groupSort into dataToAdd due to overlaping keys");h={...n,...s}}return u.handlers[l]&&u.handlers[l][c]&&y in u.handlers[l][c]||(u.handlers[l]=u.handlers[l]||{},u.handlers[l][c]=u.handlers[l][c]||{},u.handlers[l][c][y]={data:h},r.push(((e,t)=>(a,r)=>{E.register(t,e,a,r)})(p,o),t.propMetadata(t.Metadata.key(e.ModelOperations.OPERATIONS,c,p),u))),r},[]);return t.apply(...d)(i,c)}}function j(e,a){return(...r)=>t.metadata(e,{args:r,handler:a})}function V(e=c.READONLY.INVALID){const r=s.READONLY,o={message:e,description:"defines the attribute as readOnly",async:!1};return t.Decoration.for(r).define({decorator:a.innerValidationDecorator,args:[V,r,o]}).apply()}async function _(e,t,a,r){r[a]=e.timestamp}async function F(e,t,a,r){if(r[a])try{r[a]=JSON.stringify(r[a])}catch(e){throw new T(`Failed to serialize ${a.toString()} property of model ${r.constructor.name}: e`)}}async function $(e,t,a,r){if(r[a]&&"string"==typeof r[a])try{r[a]=JSON.parse(r[a])}catch(e){throw new T(`Failed to deserialize ${a.toString()} property of model ${r.constructor.name}: ${e}`)}}function H(e,a){const r=[];for(const o in e){if(!Object.prototype.hasOwnProperty.call(e,o)||a.includes(o))continue;const s=t.Metadata.validationFor(e.constructor,o)||{};r.push({prop:o,decorators:s})}return r}function Y(e,t,r,o,s){const n=a.Validation.get(o.key);if(!n)throw Error("Missing validator for "+o.key);if(!n.updateHasErrors)return a.toConditionalPromise(void 0,s);if(!s&&o.async)return a.toConditionalPromise(void 0,s);const i=Object.values(o)||{},c=n.updateHasErrors(e[r],t[r],...i);return a.toConditionalPromise(c,s)}function B(e,t,r,o,s){const n={};for(const i in o){const c={...o[i],key:i};if(!s&&c.async)continue;let l=Y(e,t,r,c,s);if(c.key===a.ValidationKeys.LIST&&(!l||s)){const o=e[r],n=t[r],i=o instanceof Set?[...o]:o,d=n instanceof Set?[...n]:n;if(i?.length){const e=[c.class||c.clazz||c.customTypes].flat().map(e=>((e=(e="function"!=typeof e||e.name?e:e()).name?e.name:e)+"").toLowerCase()),t=i.map(t=>{const r=a.Model.pk(t,!0);if(!r)return"Failed to find model id";const o=d.find(e=>r===a.Model.pk(e,!0));return a.Model.isModel(t)?t.hasErrors(o):e.includes(typeof t)?void 0:"Value has no validatable type"});if(s)l=Promise.all(t).then(e=>e.every(e=>!e)?void 0:e);else{const e=t.every(e=>!e);l=t.length>0&&!e?t:void 0}}}l&&(n[c.key]=l)}if(!s)return Object.keys(n).length>0?n:void 0;const i=Object.keys(n),c=Object.values(n);return Promise.all(c).then(e=>{const t={};for(let a=0;a<e.length;a++){const r=e[a];void 0!==r&&(t[i[a]]=r)}return Object.keys(t).length>0?t:void 0})}function q(e,r,o,...s){const n=H(r,s),i={},c={};for(const{prop:s,decorators:l}of n){const n=s+"",d=r[s],{designTypes:p,designType:u}=t.Metadata.getPropDesignTypes(r.constructor,s);if(!p)continue;if(p.some(e=>[Array.name,Set.name].includes(e))){if(!l||!Object.keys(l).includes(a.ValidationKeys.LIST)){i[n]={[a.ValidationKeys.TYPE]:`Array or Set property '${n}' requires a @list decorator`};continue}if(d&&!(Array.isArray(d)||d instanceof Set)){i[n]={[a.ValidationKeys.TYPE]:`Property '${s+""}' must be either an Array or a Set`};continue}}const y=B(r,e,n,l,o)||{},h=a.Model.isPropertyModel(r,n);if(null!=d&&h){const t=d,r=(Array.isArray(u)?u:[u]).map(e=>("function"!=typeof e||e.name||(e=e()),a.Model.get(e.name||e))).find(e=>!!e);r&&t instanceof r?c[n]=t.hasErrors(e[s]):(y[a.ValidationKeys.TYPE]=r?"Value must be an instance of "+r.name:`Unable to verify type consistency, missing model registry for ${p.toString()} on prop ${n}`,delete y[a.ModelKeys.TYPE])}(Object.keys(y).length>0||o)&&(i[n]=y),o||Object.entries(c[n]||{}).forEach(([e,t])=>{void 0!==t&&(i[`${n}.${e}`]=t)})}if(!o)return Object.keys(i).length>0?new a.ModelErrorDefinition(i):void 0;const l=i,d=Object.keys(l),p=Object.values(l);return Promise.allSettled(p).then(async e=>{const t={};for(const[e,a]of Object.entries(c)){const r=await a;r&&Object.entries(r).forEach(([a,r])=>{void 0!==r&&(t[[e,a].join(".")]=r)})}for(let a=0;a<e.length;a++){const r=d[a],o=e[a];"fulfilled"===o.status&&void 0!==o.value?t[r]=o.value:"rejected"===o.status&&(t[r]=o.reason instanceof Error?o.reason.message:(o.reason||"Validation failed")+"")}return Object.keys(t).length>0?new a.ModelErrorDefinition(t):void 0})}function z(e,t,r,o,s){if(void 0===o[r])return;const n=a.Hashing.hash(o[r]);s&&o[r]===n||(o[r]=n)}function G(){return t.apply(x(z),t.propMetadata(s.HASH,{}))}function Q(e,t,a,r){try{const{args:e,type:o,prefix:s,suffix:n,separator:i}=t,c=e.map(t=>{if(!(t in r))throw new g(`Property ${t} not found to compose from`);if("keys"===o)return t;if(void 0===r[t])throw new g(`Property ${e} does not contain a value to compose from`);return r[t].toString()});s&&c.unshift(s),n&&c.push(n),r[a]=c.join(i)}catch(e){throw new g("Failed to compose value: "+e)}}function J(e,a=!1,r=n,o="values",i="",c="",l={priority:55}){const d={args:e,hashResult:a,separator:r,type:o,prefix:i,suffix:c},p=[x(Q,d,l),t.propMetadata(s.COMPOSED,d)];return a&&p.push(G()),t.apply(...p)}function W(t){return(a,r,o,s)=>{try{switch(t){case e.OperationKeys.CREATE:s[o]=1;break;case e.OperationKeys.UPDATE:s[o]++;break;default:throw new g("Invalid operation: "+t)}}catch(e){throw new g("Failed to update version: "+e)}}}a.Model.prototype.isTransient=function(){return t.Metadata.isTransient(this)},a.Model.prototype.hasErrors=function(e,...t){!e||e instanceof a.Model||(t.unshift(e),e=void 0);const r=this.isAsync(),o=a.validate(this,r,...t);return r?Promise.resolve(o).then(a=>a||!e?a:q(e,this,r,...t)):o||!e?o:q(e,this,r,...t)},a.Model.prototype.segregate=function(){return a.Model.segregate(this)},a.Model.segregate=e=>{if(!t.Metadata.isTransient(e))return{model:e};const r=t.Metadata.validatableProperties(e.constructor),o=t.Metadata.get(e.constructor,s.TRANSIENT),n={model:{},transient:{}};for(const t of r)if(Object.keys(o).includes(t)){n.transient=n.transient||{};try{n.transient[t]=e[t]}catch(e){throw new T(`Failed to serialize transient property ${t}: ${e}`)}}else n.model=n.model||{},n.model[t]=e[t];return n.model=a.Model.build(n.model,e.constructor.name),n},a.Model.pk=((e,r=!1)=>{if(!e)throw Error("No model was provided");const o=e instanceof a.Model?e.constructor:e,n=t.Metadata.get(o,s.ID);if(!n)throw Error("No Id property defined for model "+(o?.name||"Unknown Model"));const i=Object.keys(n)[0];if(!r)return i;if(e instanceof a.Model)return e[i];throw Error("Cannot get the value of the pk from the constructor")}).bind(a.Model),a.Model.isTransient=(e=>t.Metadata.isTransient(e)).bind(a.Model),t.Metadata.saveOperation=((a,r,o,s)=>{r&&t.Metadata.set(a,t.Metadata.key(e.ModelOperations.OPERATIONS,r,o),s)}).bind(t.Metadata),t.Metadata.readOperation=((a,r,o)=>{if(r&&o)return t.Metadata.get(a,t.Metadata.key(e.ModelOperations.OPERATIONS,r,o))}).bind(t.Metadata),t.Metadata.isTransient=(e=>!!t.Metadata.get("function"!=typeof e?e.constructor:e,s.TRANSIENT)).bind(t.Metadata);const Z={parentContext:void 0,childContexts:[],ignoredValidationProperties:[],callArgs:[],writeOperation:!1,affectedTables:[],operation:void 0,breakOnHandlerError:!0,rebuildWithTransient:!0},X=e=>(new ee).accumulate(Object.assign({},e,{timestamp:new Date}));class ee{constructor(){this.cache=new o.ObjectAccumulator,Object.defineProperty(this,"cache",{value:new o.ObjectAccumulator,writable:!1,enumerable:!1,configurable:!0})}static{this.factory=X}accumulate(e){return Object.defineProperty(this,"cache",{value:this.cache.accumulate(e),writable:!1,enumerable:!1,configurable:!0}),this}get timestamp(){return this.cache.timestamp}get(e){try{return this.cache.get(e)}catch(t){const a=this.cache.parentContext;if(a)return a.get(e);throw t}}static childFrom(e,t){return ee.factory(Object.assign({},e.cache,t||{}))}static async from(e,t,a,...r){return ee.factory(Object.assign({},Z,t,{operation:e,model:a}))}static async args(e,t,a,r,o){const s=a.pop();async function n(){return r?r.context(e,o||{},t,...a):ee.from(e,o||{},t,...a)}let i;return s?s instanceof ee?(i=s,a.push(s)):(a.push(s),i=await n(),a.push(i)):(i=await n(),a.push(i)),{context:i,args:a}}}function te(e,t,a,r,o){const s=o||a.name;e[s]=new Proxy(e[s],{apply:async(e,a,o)=>{let s=t.call(a,...o);s instanceof Promise&&(s=await s);const n=s[s.length-1];if(!(n instanceof ee))throw new g("Missing a context");let i=e.call(a,...s);return i instanceof Promise&&(i=await i),i=r.call(a,i,n),i instanceof Promise&&(i=await i),i}})}class ae{get class(){if(!this._class)throw new g("No class definition found for this repository");return this._class}get pk(){return this._pk||(this._pk=a.Model.pk(this.class),this._pkProps=t.Metadata.get(this.class,t.Metadata.key(s.ID,this._pk))),this._pk}get pkProps(){return this._pkProps||this.pk,this._pkProps}constructor(e){e&&(this._class=e);const t=this;[this.create,this.read,this.update,this.delete].forEach(e=>{const a=e.name;te(t,t[a+"Prefix"],e,t[a+"Suffix"])})}async createAll(e,...t){return Promise.all(e.map(e=>this.create(e,...t)))}async createPrefix(t,...a){const r=await ee.args(e.OperationKeys.CREATE,this.class,a);return t=new this.class(t),await M(this,r.context,t,e.OperationKeys.CREATE,e.OperationKeys.ON),[t,...r.args]}async createSuffix(t,a){return await M(this,a,t,e.OperationKeys.CREATE,e.OperationKeys.AFTER),t}async createAllPrefix(t,...a){const r=await ee.args(e.OperationKeys.CREATE,this.class,a);return await Promise.all(t.map(async t=>(t=new this.class(t),await M(this,r.context,t,e.OperationKeys.CREATE,e.OperationKeys.ON),t))),[t,...r.args]}async createAllSuffix(t,a){return await Promise.all(t.map(t=>M(this,a,t,e.OperationKeys.CREATE,e.OperationKeys.AFTER))),t}async readAll(e,...t){return await Promise.all(e.map(e=>this.read(e,...t)))}async readSuffix(t,a){return await M(this,a,t,e.OperationKeys.READ,e.OperationKeys.AFTER),t}async readPrefix(t,...a){const r=await ee.args(e.OperationKeys.READ,this.class,a),o=new this.class;return o[this.pk]=t,await M(this,r.context,o,e.OperationKeys.READ,e.OperationKeys.ON),[t,...r.args]}async readAllPrefix(t,...a){const r=await ee.args(e.OperationKeys.READ,this.class,a);return await Promise.all(t.map(async t=>{const a=new this.class;return a[this.pk]=t,M(this,r.context,a,e.OperationKeys.READ,e.OperationKeys.ON)})),[t,...r.args]}async readAllSuffix(t,a){return await Promise.all(t.map(t=>M(this,a,t,e.OperationKeys.READ,e.OperationKeys.AFTER))),t}async updateAll(e,...t){return Promise.all(e.map(e=>this.update(e,...t)))}async updateSuffix(t,a){return await M(this,a,t,e.OperationKeys.UPDATE,e.OperationKeys.AFTER),t}async updatePrefix(t,...a){const r=await ee.args(e.OperationKeys.UPDATE,this.class,a),o=t[this.pk];if(!o)throw new g("No value for the Id is defined under the property "+this.pk);const s=await this.read(o);return await M(this,r.context,t,e.OperationKeys.UPDATE,e.OperationKeys.ON,s),[t,...r.args]}async updateAllPrefix(t,...a){const r=await ee.args(e.OperationKeys.UPDATE,this.class,a);return await Promise.all(t.map(t=>(t=new this.class(t),M(this,r.context,t,e.OperationKeys.UPDATE,e.OperationKeys.ON),t))),[t,...r.args]}async updateAllSuffix(t,a){return await Promise.all(t.map(t=>M(this,a,t,e.OperationKeys.UPDATE,e.OperationKeys.AFTER))),t}async deleteAll(e,...t){return Promise.all(e.map(e=>this.delete(e,...t)))}async deleteSuffix(t,a){return await M(this,a,t,e.OperationKeys.DELETE,e.OperationKeys.AFTER),t}async deletePrefix(t,...a){const r=await ee.args(e.OperationKeys.DELETE,this.class,a),o=await this.read(t,...r.args);return await M(this,r.context,o,e.OperationKeys.DELETE,e.OperationKeys.ON),[t,...r.args]}async deleteAllPrefix(t,...a){const r=await ee.args(e.OperationKeys.DELETE,this.class,a),o=await this.readAll(t,...r.args);return await Promise.all(o.map(async t=>M(this,r.context,t,e.OperationKeys.DELETE,e.OperationKeys.ON))),[t,...r.args]}async deleteAllSuffix(t,a){return await Promise.all(t.map(t=>M(this,a,t,e.OperationKeys.DELETE,e.OperationKeys.AFTER))),t}merge(e,t){const a=e=>Object.entries(e).reduce((e,[t,a])=>(void 0!==a&&(e[t]=a),e),{});return new this.class(Object.assign({},a(e),a(t)))}toString(){return this.class.name+" Repository"}}const re="##VERSION##",oe="##PACKAGE##";t.Metadata.registerLibrary(oe,re),e.BadRequestError=m,e.BaseError=O,e.BaseRepository=ae,e.BlockOperations=t=>j(e.OperationKeys.REFLECT+e.OperationKeys.BLOCK,(e,t)=>e.includes(t))(t),e.ConflictError=P,e.Context=ee,e.DBKeys=s,e.DBOperations=h,e.DEFAULT_ERROR_MESSAGES=c,e.DEFAULT_TIMESTAMP_FORMAT=i,e.DefaultContextFactory=X,e.DefaultRepositoryFlags=Z,e.DefaultSeparator=n,e.InternalError=g,e.NotFoundError=w,e.Operations=E,e.OperationsRegistry=f,e.PACKAGE_NAME=oe,e.Repository=class extends ae{constructor(e){super(e)}async createPrefix(t,...a){const r=await ee.args(e.OperationKeys.CREATE,this.class,a);t=new this.class(t),await M(this,r.context,t,e.OperationKeys.CREATE,e.OperationKeys.ON);const o=await Promise.resolve(t.hasErrors());if(o)throw new A(o.toString());return[t,...r.args]}async createAllPrefix(t,...a){const r=await ee.args(e.OperationKeys.CREATE,this.class,a);await Promise.all(t.map(async t=>(t=new this.class(t),await M(this,r.context,t,e.OperationKeys.CREATE,e.OperationKeys.ON),t)));const o=(await Promise.all(t.map(e=>Promise.resolve(e.hasErrors())))).reduce((e,t,a)=>(t&&(e="string"==typeof e?e+`\n - ${a}: ${t.toString()}`:` - ${a}: ${t.toString()}`),e),void 0);if(o)throw new A(o);return[t,...r.args]}async updatePrefix(t,...a){const r=await ee.args(e.OperationKeys.UPDATE,this.class,a),o=t[this.pk];if(!o)throw new g("No value for the Id is defined under the property "+this.pk);const s=await this.read(o);t=this.merge(s,t),await M(this,r.context,t,e.OperationKeys.UPDATE,e.OperationKeys.ON,s);const n=await Promise.resolve(t.hasErrors(s));if(n)throw new A(n.toString());return[t,...r.args]}async updateAllPrefix(t,...a){const r=await ee.args(e.OperationKeys.UPDATE,this.class,a),o=t.map(e=>{const t=e[this.pk];if(void 0===t)throw new g("No value for the Id is defined under the property "+this.pk);return t}),s=await this.readAll(o,...r.args);t=t.map((e,t)=>this.merge(s[t],e)),await Promise.all(t.map((t,a)=>M(this,r.context,t,e.OperationKeys.UPDATE,e.OperationKeys.ON,s[a])));const n=(await Promise.all(t.map((e,t)=>Promise.resolve(e.hasErrors(s[t]))))).reduce((e,t,a)=>(t&&(e="string"==typeof e?e+`\n - ${a}: ${t.toString()}`:` - ${a}: ${t.toString()}`),e),void 0);if(n)throw new A(n);return[t,...r.args]}},e.SerializationError=T,e.UpdateValidationKeys=l,e.UpdateValidator=d,e.VERSION=re,e.ValidationError=A,e.after=C,e.afterAny=(e,t,a)=>C(h.ALL,e,t,a),e.afterCreate=(e,t,a)=>C(h.CREATE,e,t,a),e.afterCreateUpdate=(e,t,a)=>C(h.CREATE_UPDATE,e,t,a),e.afterDelete=(e,t,a)=>C(h.DELETE,e,t,a),e.afterRead=(e,t,a)=>C(h.READ,e,t,a),e.afterUpdate=(e,t,a)=>C(h.UPDATE,e,t,a),e.composed=(e,t=n,a=!1,r="",o="",s={priority:55})=>J(e,a,t,"values",r,o,s),e.composedFromCreateUpdate=Q,e.composedFromKeys=(e,t=n,a=!1,r="",o="",s={priority:55})=>J(e,a,t,"keys",r,o,s),e.enforceDBDecorators=M,e.getDbDecorators=R,e.getHandlerArgs=D,e.getHandlersDecorators=v,e.getValidatableUpdateProps=H,e.groupDecorators=S,e.hash=G,e.hashOnCreateUpdate=z,e.id=()=>t.apply(a.required(),V(),(e,a)=>t.propMetadata(t.Metadata.key(s.ID,a),{})(e,a)),e.on=k,e.onAny=(e,t,a)=>k(h.ALL,e,t,a),e.onCreate=N,e.onCreateUpdate=x,e.onDelete=(e,t,a)=>k(h.DELETE,e,t,a),e.onRead=(e,t,a)=>k(h.READ,e,t,a),e.onUpdate=I,e.operation=U,e.prefixMethod=(e,t,a,r)=>{const o=r||t.name;e[o]=new Proxy(e[o],{apply:async(e,t,r)=>{let o=a.call(t,...r);return o instanceof Promise&&(o=await o),o=e.call(t,...o),o instanceof Promise&&(o=await o),o}})},e.readonly=V,e.serialize=()=>t.apply(x(F),C(h.ALL,$),a.type([String,Object]),t.metadata(s.SERIALIZE,{})),e.serializeAfterAll=$,e.serializeOnCreateUpdate=F,e.sortDecorators=L,e.storeHandlerMetadata=j,e.suffixMethod=(e,t,a,r)=>{const o=r||t.name;e[o]=new Proxy(e[o],{apply:async(e,t,r)=>{let o=e.call(t,...r);return o instanceof Promise&&(o=await o),o=a.call(t,...o),o instanceof Promise&&(o=await o),o}})},e.timestamp=(r=h.CREATE_UPDATE,o=i)=>{const n=a.Validation.updateKey(s.TIMESTAMP);return t.Decoration.for(n).define({decorator:(r,o)=>{const i=[a.date(o,c.TIMESTAMP.DATE),a.required(c.TIMESTAMP.REQUIRED),t.propMetadata(a.Validation.key(s.TIMESTAMP),{operation:r,format:o}),k(r,_)];return-1!==r.indexOf(e.OperationKeys.UPDATE)?i.push(t.propMetadata(n,{message:c.TIMESTAMP.INVALID})):i.push(V()),t.apply(...i)},args:[r,o]}).apply()},e.timestampHandler=_,e.transient=()=>t.Decoration.for(s.TRANSIENT).define((e,a)=>{t.propMetadata(s.TRANSIENT,!0)(e.constructor),t.propMetadata(t.Metadata.key(s.TRANSIENT,a),{})(e,a)}).apply(),e.validateCompare=q,e.validateDecorator=Y,e.validateDecorators=B,e.version=()=>{const r=s.VERSION;return t.Decoration.for(r).define(a.type(Number),N(W(e.OperationKeys.CREATE)),I(W(e.OperationKeys.UPDATE)),t.propMetadata(r,!0)).apply()},e.versionCreateUpdate=W,e.wrapMethodWithContext=te},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@decaf-ts/decoration"),require("@decaf-ts/decorator-validation"),require("tslib"),require("typed-object-accumulator")):"function"==typeof define&&define.amd?define(["exports","@decaf-ts/decoration","@decaf-ts/decorator-validation","tslib","typed-object-accumulator"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["db-decorators"]={},e.decafTsDecoration,e.decafTsDecoratorValidation,e.tslib,e.typedObjectAccumulator);
|
|
1
|
+
var e,t;e=this,t=function(e,t,r,a,o,s){"use strict";const n={REFLECT:r.ModelKeys.MODEL+".persistence.",REPOSITORY:"repository",CLASS:"_class",ID:"id",INDEX:"index",UNIQUE:"unique",SERIALIZE:"serialize",READONLY:"readonly",TIMESTAMP:"timestamp",TRANSIENT:"transient",HASH:"hash",COMPOSED:"composed",VERSION:"version",ORIGINAL:"__originalObj"},i="_",c="dd/MM/yyyy HH:mm:ss:S",l={ID:{INVALID:"This Id is invalid",REQUIRED:"The Id is mandatory"},READONLY:{INVALID:"This cannot be updated"},TIMESTAMP:{REQUIRED:"Timestamp is Mandatory",DATE:"The Timestamp must the a valid date",INVALID:"This value must always increase"}},d={REFLECT:"db.update.validation.",TIMESTAMP:n.TIMESTAMP,READONLY:n.READONLY};e.ReadOnlyValidator=class extends r.Validator{constructor(){super(l.READONLY.INVALID)}hasErrors(e,...t){}updateHasErrors(e,t,a){if(void 0!==e)return r.isEqual(e,t)?void 0:this.getMessage(a||this.message)}},e.ReadOnlyValidator=a.__decorate([r.validator(d.READONLY),a.__metadata("design:paramtypes",[])],e.ReadOnlyValidator),e.TimestampValidator=class extends r.Validator{constructor(){super(l.TIMESTAMP.INVALID)}hasErrors(e,...t){}updateHasErrors(e,t,r){if(void 0!==e){r=r||this.getMessage(r||this.message);try{e=new Date(e),t=new Date(t)}catch(e){return r}return e>t?void 0:r}}},e.TimestampValidator=a.__decorate([r.validator(d.TIMESTAMP),a.__metadata("design:paramtypes",[])],e.TimestampValidator);class p extends r.Validator{constructor(e=r.DEFAULT_ERROR_MESSAGES.DEFAULT,...t){super(e,...t)}}var u,y,f;r.Validation.updateKey=e=>d.REFLECT+e,e.OperationKeys=void 0,(u=e.OperationKeys||(e.OperationKeys={})).REFLECT="decaf.model.db.operations.",u.CREATE="create",u.READ="read",u.UPDATE="update",u.DELETE="delete",u.ON="on.",u.AFTER="after.",u.BLOCK="block",e.ModelOperations=void 0,(y=e.ModelOperations||(e.ModelOperations={})).OPERATIONS="operations",y.RELATIONS="relations",e.BulkCrudOperationKeys=void 0,(f=e.BulkCrudOperationKeys||(e.BulkCrudOperationKeys={})).CREATE_ALL="createAll",f.READ_ALL="readAll",f.UPDATE_ALL="updateAll",f.DELETE_ALL="deleteAll";const h={CREATE:[e.OperationKeys.CREATE],READ:[e.OperationKeys.READ],UPDATE:[e.OperationKeys.UPDATE],DELETE:[e.OperationKeys.DELETE],CREATE_UPDATE:[e.OperationKeys.CREATE,e.OperationKeys.UPDATE],READ_CREATE:[e.OperationKeys.READ,e.OperationKeys.CREATE],ALL:[e.OperationKeys.CREATE,e.OperationKeys.READ,e.OperationKeys.UPDATE,e.OperationKeys.DELETE]};class E{constructor(){this.cache={}}get(e,t,r,a){let o;a=a||[];try{o="string"==typeof e?e:e.constructor.name,a.unshift(...Object.values(this.cache[o][t][r]||[]))}catch(t){if("string"==typeof e||e===Object.prototype||Object.getPrototypeOf(e)===Object.prototype)return a}let s=Object.getPrototypeOf(e);return s.constructor.name===o&&(s=Object.getPrototypeOf(s)),this.get(s,t,r,a)}register(e,t,r,a){const o=r.constructor.name,s=g.getHandlerName(e);this.cache[o]||(this.cache[o]={}),this.cache[o][a]||(this.cache[o][a]={}),this.cache[o][a][t]||(this.cache[o][a][t]={}),this.cache[o][a][t][s]||(this.cache[o][a][t][s]=e)}}class g{constructor(){}static getHandlerName(e){return e.name?e.name:r.Hashing.hash(e.toString())}static key(t){return e.OperationKeys.REFLECT+t}static get(e,t,r){return g.registry.get(e,t,r)}static getOpRegistry(){return g.registry||(g.registry=new E),g.registry}static register(e,t,r,a){g.getOpRegistry().register(e,t,r,a)}}class O extends Error{constructor(e,t,r){if(t instanceof O)return t;super(`[${e}] ${t instanceof Error?t.message:t}`),this.code=r,t instanceof Error&&(this.stack=t.stack)}}class m extends O{constructor(e,t=m.name,r=400){super(t,e,r)}}class A extends m{constructor(e){super(e,A.name,422)}}class T extends O{constructor(e,t=T.name,r=500){super(t,e,r)}}class w extends T{constructor(e){super(e,w.name,500)}}class P extends m{constructor(e){super(e,P.name,404)}}class M extends m{constructor(e){super(e,M.name,409)}}const D={priority:50},R=(e,t,r,a)=>{const o=r.constructor.name;if(!o)throw new T("Could not determine model class");a=a||{},e.props.handlers[o]&&e.props.handlers[o][t]&&(a={...e.props.handlers[o][t],...a});let s=Object.getPrototypeOf(r);return s===Object.prototype?a:(s.constructor.name===o&&(s=Object.getPrototypeOf(s)),R(e,t,s,a))};function K(e,t,r){const a=[];for(const o in t){const s=t[o];for(const t of s){const{key:s}=t,n=g.get(e,o,r+s);if(!n||!n.length)throw new T(`Could not find registered handler for the operation ${r+s} under property ${o}`);const i=R(t,o,e);if(!i||Object.values(i).length!==n.length)throw new T("Args and handlers length do not match");for(let e=0;e<n.length;e++){const t=i[n[e].name].data;a.push({handler:n[e],data:[t],prop:[o]})}}}return a}function b(e){const t=e.reduce((e,t)=>{if(!t||!t.data||!t.prop)throw new T("Missing decorator properties or data");if(!t.data[0].group)return e.set(Symbol(),t),e;const r=t.data[0].group;if(e.has(r)){const a=e.get(r);e.set(r,{handler:a.handler,data:[...a.data,...t.data],prop:[...a.prop,...t.prop]})}else e.set(r,{...t});return e},new Map),r=Array.from(t.values());return r.forEach(e=>{const t=e.data.map((t,r)=>({data:t,prop:e.prop[r]}));t.sort((e,t)=>(e.data.groupPriority??50)-(t.data.groupPriority??50)),e.data=t.map(e=>e.data),e.prop=t.map(e=>e.prop)}),r}function x(e){return e.sort((e,t)=>(e.data[0].priority??50)-(t.data[0].priority??50)),e}function v(e,t,r){return I(h.CREATE_UPDATE,e,t,r)}function S(e,t,r){return I(h.UPDATE,e,t,r)}function L(e,t,r){return I(h.CREATE,e,t,r)}function I(t=h.ALL,r,a,o){return C(e.OperationKeys.ON,t,r,a,o)}function N(t=h.ALL,r,a,o){return C(e.OperationKeys.AFTER,t,r,a,o)}function C(r,a=h.ALL,o,s,n=D){return(i,c)=>{const l=i.constructor.name,d=a.reduce((a,d)=>{const p=r+d;let u=t.Metadata.readOperation(i.constructor,c,p);u||(u={operation:d,handlers:{}});const y=g.getHandlerName(o);let f=n;if(s){if(Object.keys(s).filter(e=>e in n).length>0)throw new T("Unable to merge groupSort into dataToAdd due to overlaping keys");f={...n,...s}}return u.handlers[l]&&u.handlers[l][c]&&y in u.handlers[l][c]||(u.handlers[l]=u.handlers[l]||{},u.handlers[l][c]=u.handlers[l][c]||{},u.handlers[l][c][y]={data:f},a.push(((e,t)=>(r,a)=>{g.register(t,e,r,a)})(p,o),t.propMetadata(t.Metadata.key(e.ModelOperations.OPERATIONS,c,p),u))),a},[]);return t.apply(...d)(i,c)}}function k(e,r){return(...a)=>t.metadata(e,{args:a,handler:r})}function U(e=l.READONLY.INVALID){const a=n.READONLY,o={message:e,description:"defines the attribute as readOnly",async:!1};return t.Decoration.for(a).define({decorator:r.innerValidationDecorator,args:[U,a,o]}).apply()}async function j(e,t,r,a){a[r]=e.timestamp}async function V(e,t,r,a){if(a[r])try{a[r]=JSON.stringify(a[r])}catch(e){throw new w(`Failed to serialize ${r.toString()} property of model ${a.constructor.name}: e`)}}async function F(e,t,r,a){if(a[r]&&"string"==typeof a[r])try{a[r]=JSON.parse(a[r])}catch(e){throw new w(`Failed to deserialize ${r.toString()} property of model ${a.constructor.name}: ${e}`)}}function _(e,r){const a=[];for(const o in e){if(!Object.prototype.hasOwnProperty.call(e,o)||r.includes(o))continue;const s=t.Metadata.validationFor(e.constructor,o)||{};a.push({prop:o,decorators:s})}return a}function $(e,t,a,o,s){const n=r.Validation.get(o.key);if(!n)throw Error("Missing validator for "+o.key);if(!n.updateHasErrors)return r.toConditionalPromise(void 0,s);if(!s&&o.async)return r.toConditionalPromise(void 0,s);const i=Object.values(o)||{},c=n.updateHasErrors(e[a],t[a],...i);return r.toConditionalPromise(c,s)}function H(e,t,a,o,s){const n={};for(const i in o){const c={...o[i],key:i};if(!s&&c.async)continue;let l=$(e,t,a,c,s);if(c.key===r.ValidationKeys.LIST&&(!l||s)){const o=e[a],n=t[a],i=o instanceof Set?[...o]:o,d=n instanceof Set?[...n]:n;if(i?.length){const e=[c.class||c.clazz||c.customTypes].flat().map(e=>((e=(e="function"!=typeof e||e.name?e:e()).name?e.name:e)+"").toLowerCase()),t=i.map(t=>{const a=r.Model.pk(t,!0);if(!a)return"Failed to find model id";const o=d.find(e=>a===r.Model.pk(e,!0));return r.Model.isModel(t)?t.hasErrors(o):e.includes(typeof t)?void 0:"Value has no validatable type"});if(s)l=Promise.all(t).then(e=>e.every(e=>!e)?void 0:e);else{const e=t.every(e=>!e);l=t.length>0&&!e?t:void 0}}}l&&(n[c.key]=l)}if(!s)return Object.keys(n).length>0?n:void 0;const i=Object.keys(n),c=Object.values(n);return Promise.all(c).then(e=>{const t={};for(let r=0;r<e.length;r++){const a=e[r];void 0!==a&&(t[i[r]]=a)}return Object.keys(t).length>0?t:void 0})}function Y(e,a,o,...s){const n=_(a,s),i={},c={};for(const{prop:s,decorators:l}of n){const n=s+"",d=a[s],{designTypes:p,designType:u}=t.Metadata.getPropDesignTypes(a.constructor,s);if(!p)continue;if(p.some(e=>[Array.name,Set.name].includes(e))){if(!l||!Object.keys(l).includes(r.ValidationKeys.LIST)){i[n]={[r.ValidationKeys.TYPE]:`Array or Set property '${n}' requires a @list decorator`};continue}if(d&&!(Array.isArray(d)||d instanceof Set)){i[n]={[r.ValidationKeys.TYPE]:`Property '${s+""}' must be either an Array or a Set`};continue}}const y=H(a,e,n,l,o)||{},f=r.Model.isPropertyModel(a,n);if(null!=d&&f){const t=d,a=(Array.isArray(u)?u:[u]).map(e=>("function"!=typeof e||e.name||(e=e()),r.Model.get(e.name||e))).find(e=>!!e);a&&t instanceof a?c[n]=t.hasErrors(e[s]):(y[r.ValidationKeys.TYPE]=a?"Value must be an instance of "+a.name:`Unable to verify type consistency, missing model registry for ${p.toString()} on prop ${n}`,delete y[r.ModelKeys.TYPE])}(Object.keys(y).length>0||o)&&(i[n]=y),o||Object.entries(c[n]||{}).forEach(([e,t])=>{void 0!==t&&(i[`${n}.${e}`]=t)})}if(!o)return Object.keys(i).length>0?new r.ModelErrorDefinition(i):void 0;const l=i,d=Object.keys(l),p=Object.values(l);return Promise.allSettled(p).then(async e=>{const t={};for(const[e,r]of Object.entries(c)){const a=await r;a&&Object.entries(a).forEach(([r,a])=>{void 0!==a&&(t[[e,r].join(".")]=a)})}for(let r=0;r<e.length;r++){const a=d[r],o=e[r];"fulfilled"===o.status&&void 0!==o.value?t[a]=o.value:"rejected"===o.status&&(t[a]=o.reason instanceof Error?o.reason.message:(o.reason||"Validation failed")+"")}return Object.keys(t).length>0?new r.ModelErrorDefinition(t):void 0})}function B(e,t,a,o,s){if(void 0===o[a])return;const n=r.Hashing.hash(o[a]);s&&o[a]===n||(o[a]=n)}function q(){return t.apply(v(B),t.propMetadata(n.HASH,{}))}function z(e,t,r,a){try{const{args:e,type:o,prefix:s,suffix:n,separator:i}=t,c=e.map(t=>{if(!(t in a))throw new T(`Property ${t} not found to compose from`);if("keys"===o)return t;if(void 0===a[t])throw new T(`Property ${e} does not contain a value to compose from`);return a[t].toString()});s&&c.unshift(s),n&&c.push(n),a[r]=c.join(i)}catch(e){throw new T("Failed to compose value: "+e)}}function G(e,r=!1,a=i,o="values",s="",c="",l={priority:55}){const d={args:e,hashResult:r,separator:a,type:o,prefix:s,suffix:c},p=[v(z,d,l),t.propMetadata(n.COMPOSED,d)];return r&&p.push(q()),t.apply(...p)}function Q(t){return(r,a,o,s)=>{try{switch(t){case e.OperationKeys.CREATE:s[o]=1;break;case e.OperationKeys.UPDATE:s[o]++;break;default:throw new T("Invalid operation: "+t)}}catch(e){throw new T("Failed to update version: "+e)}}}function J(e){return e.reduce((e,t,r)=>(t&&(e="string"==typeof e?e+`\n - ${r}: ${t.toString()}`:` - ${r}: ${t.toString()}`),e),void 0)}async function W(t,r,a,o,s,n){const i=Z(a,o,s);if(!i)return;const c=x(b(K(a,i,s)));for(const i of c){const c=[r,i.data.length>1?i.data:i.data[0],i.prop.length>1?i.prop:i.prop[0],a];if(o===e.OperationKeys.UPDATE&&s===e.OperationKeys.ON){if(!n)throw new T("Missing old model for update operation");c.push(n)}try{await i.handler.apply(t,c)}catch(e){const t=`Failed to execute handler ${i.handler.name} for ${i.prop} on ${a.constructor.name} due to error: ${e}`;if(r.get("breakOnHandlerError"))throw new T(t)}}}function Z(r,a,o){const s=o?.replace(/[.]$/,""),n=t.Metadata.get(r.constructor,e.ModelOperations.OPERATIONS);if(n)return Object.keys(n).reduce((e,t)=>{const r=s?n[t][s]||{}:n[t],o=Object.keys(r).filter(e=>e===a),i=[];for(const e of o)i.push({key:e,props:r[e]});return i&&i.length&&(e||(e={}),e[t]=i),e},void 0)}r.Model.prototype.isTransient=function(){return t.Metadata.isTransient(this)},r.Model.prototype.hasErrors=function(e,...t){!e||e instanceof r.Model||(t.unshift(e),e=void 0);const a=this.isAsync(),o=r.validate(this,a,...t);return a?Promise.resolve(o).then(r=>r||!e?r:Y(e,this,a,...t)):o||!e?o:Y(e,this,a,...t)},r.Model.prototype.segregate=function(){return r.Model.segregate(this)},r.Model.segregate=e=>{if(!t.Metadata.isTransient(e))return{model:e};const a=t.Metadata.validatableProperties(e.constructor),o=t.Metadata.get(e.constructor,n.TRANSIENT),s={model:{},transient:{}};for(const t of a)if(Object.keys(o).includes(t)){s.transient=s.transient||{};try{s.transient[t]=e[t]}catch(e){throw new w(`Failed to serialize transient property ${t}: ${e}`)}}else s.model=s.model||{},s.model[t]=e[t];return s.model=r.Model.build(s.model,e.constructor.name),s},r.Model.pk=((e,a=!1)=>{if(!e)throw Error("No model was provided");const o=e instanceof r.Model?e.constructor:e,s=t.Metadata.get(o,n.ID);if(!s)throw Error("No Id property defined for model "+(o?.name||"Unknown Model"));const i=Object.keys(s)[0];if(!a)return i;if(e instanceof r.Model)return e[i];throw Error("Cannot get the value of the pk from the constructor")}).bind(r.Model),r.Model.pkProps=(e=>t.Metadata.get(e,t.Metadata.key(n.ID,r.Model.pk(e)))).bind(r.Model),r.Model.isTransient=(e=>t.Metadata.isTransient(e)).bind(r.Model),r.Model.merge=((e,t,r)=>{const a=e=>Object.entries(e).reduce((e,[t,r])=>(void 0!==r&&(e[t]=r),e),{});return new(r=r||e.constructor)(Object.assign({},a(e),a(t)))}).bind(r.Model),t.Metadata.saveOperation=((r,a,o,s)=>{a&&t.Metadata.set(r,t.Metadata.key(e.ModelOperations.OPERATIONS,a,o),s)}).bind(t.Metadata),t.Metadata.readOperation=((r,a,o)=>{if(a&&o)return t.Metadata.get(r,t.Metadata.key(e.ModelOperations.OPERATIONS,a,o))}).bind(t.Metadata),t.Metadata.isTransient=(e=>!!t.Metadata.get("function"!=typeof e?e.constructor:e,n.TRANSIENT)).bind(t.Metadata);const X={parentContext:void 0,childContexts:[],ignoredValidationProperties:[],callArgs:[],writeOperation:!1,affectedTables:[],operation:void 0,breakOnHandlerError:!0,rebuildWithTransient:!0,ignoreValidation:!1,ignoreHandlers:!0},ee=e=>(new te).accumulate(Object.assign({},e,{timestamp:new Date,logger:e.logger||s.Logging.get()}));class te{constructor(){this.cache=new o.ObjectAccumulator,Object.defineProperty(this,"cache",{value:new o.ObjectAccumulator,writable:!1,enumerable:!1,configurable:!0})}static{this.factory=ee}accumulate(e){return Object.defineProperty(this,"cache",{value:this.cache.accumulate(e),writable:!1,enumerable:!1,configurable:!0}),this}get logger(){return this.cache.logger}get timestamp(){return this.cache.timestamp}get(e){try{return this.cache.get(e)}catch(t){const r=this.cache.parentContext;if(r)return r.get(e);throw t}}static childFrom(e,t){return te.factory(Object.assign({},e.cache,t||{}))}static async from(e,t,r,...a){return te.factory(Object.assign({},X,t,{operation:e,model:r,logger:t.logger||s.Logging.get()}))}static async args(e,t,r,a,o){const s=r.pop();async function n(){return a?a.context(e,o||{},t,...r):te.from(e,o||{},t,...r)}let i;return s?s instanceof te?(i=s,r.push(s)):(r.push(s),i=await n(),r.push(i)):(i=await n(),r.push(i)),{context:i,args:r}}}function re(e,t,r,a,o){const s=o||r.name;e[s]=new Proxy(e[s],{apply:async(e,r,o)=>{let s=t.call(r,...o);s instanceof Promise&&(s=await s);const n=s[s.length-1];if(!(n instanceof te))throw new T("Missing a context");let i=e.call(r,...s);return i instanceof Promise&&(i=await i),i=a.call(r,i,n),i instanceof Promise&&(i=await i),i}})}class ae{get class(){if(!this._class)throw new T("No class definition found for this repository");return this._class}get pk(){return r.Model.pk(this.class)}get pkProps(){return r.Model.pkProps(this.class)}constructor(e){e&&(this._class=e);const t=this;[this.create,this.read,this.update,this.delete].forEach(e=>{const r=e.name;re(t,t[r+"Prefix"],e,t[r+"Suffix"])})}async createAll(e,...t){return Promise.all(e.map(e=>this.create(e,...t)))}async createPrefix(t,...r){const a=await te.args(e.OperationKeys.CREATE,this.class,r);return t=new this.class(t),await W(this,a.context,t,e.OperationKeys.CREATE,e.OperationKeys.ON),[t,...a.args]}async createSuffix(t,r){return await W(this,r,t,e.OperationKeys.CREATE,e.OperationKeys.AFTER),t}async createAllPrefix(t,...r){const a=await te.args(e.OperationKeys.CREATE,this.class,r);return await Promise.all(t.map(async t=>(t=new this.class(t),await W(this,a.context,t,e.OperationKeys.CREATE,e.OperationKeys.ON),t))),[t,...a.args]}async createAllSuffix(t,r){return await Promise.all(t.map(t=>W(this,r,t,e.OperationKeys.CREATE,e.OperationKeys.AFTER))),t}async readAll(e,...t){return await Promise.all(e.map(e=>this.read(e,...t)))}async readSuffix(t,r){return await W(this,r,t,e.OperationKeys.READ,e.OperationKeys.AFTER),t}async readPrefix(t,...r){const a=await te.args(e.OperationKeys.READ,this.class,r),o=new this.class;return o[this.pk]=t,await W(this,a.context,o,e.OperationKeys.READ,e.OperationKeys.ON),[t,...a.args]}async readAllPrefix(t,...r){const a=await te.args(e.OperationKeys.READ,this.class,r);return await Promise.all(t.map(async t=>{const r=new this.class;return r[this.pk]=t,W(this,a.context,r,e.OperationKeys.READ,e.OperationKeys.ON)})),[t,...a.args]}async readAllSuffix(t,r){return await Promise.all(t.map(t=>W(this,r,t,e.OperationKeys.READ,e.OperationKeys.AFTER))),t}async updateAll(e,...t){return Promise.all(e.map(e=>this.update(e,...t)))}async updateSuffix(t,r){return await W(this,r,t,e.OperationKeys.UPDATE,e.OperationKeys.AFTER),t}async updatePrefix(t,...r){const a=await te.args(e.OperationKeys.UPDATE,this.class,r),o=t[this.pk];if(!o)throw new T("No value for the Id is defined under the property "+this.pk);const s=await this.read(o);return await W(this,a.context,t,e.OperationKeys.UPDATE,e.OperationKeys.ON,s),[t,...a.args]}async updateAllPrefix(t,...r){const a=await te.args(e.OperationKeys.UPDATE,this.class,r);return await Promise.all(t.map(t=>(t=new this.class(t),W(this,a.context,t,e.OperationKeys.UPDATE,e.OperationKeys.ON),t))),[t,...a.args]}async updateAllSuffix(t,r){return await Promise.all(t.map(t=>W(this,r,t,e.OperationKeys.UPDATE,e.OperationKeys.AFTER))),t}async deleteAll(e,...t){return Promise.all(e.map(e=>this.delete(e,...t)))}async deleteSuffix(t,r){return await W(this,r,t,e.OperationKeys.DELETE,e.OperationKeys.AFTER),t}async deletePrefix(t,...r){const a=await te.args(e.OperationKeys.DELETE,this.class,r),o=await this.read(t,...a.args);return await W(this,a.context,o,e.OperationKeys.DELETE,e.OperationKeys.ON),[t,...a.args]}async deleteAllPrefix(t,...r){const a=await te.args(e.OperationKeys.DELETE,this.class,r),o=await this.readAll(t,...a.args);return await Promise.all(o.map(async t=>W(this,a.context,t,e.OperationKeys.DELETE,e.OperationKeys.ON))),[t,...a.args]}async deleteAllSuffix(t,r){return await Promise.all(t.map(t=>W(this,r,t,e.OperationKeys.DELETE,e.OperationKeys.AFTER))),t}toString(){return this.class.name+" Repository"}}const oe="##VERSION##",se="##PACKAGE##";t.Metadata.registerLibrary(se,oe),e.BadRequestError=m,e.BaseError=O,e.BaseRepository=ae,e.BlockOperations=t=>k(e.OperationKeys.REFLECT+e.OperationKeys.BLOCK,(e,t)=>e.includes(t))(t),e.ConflictError=M,e.Context=te,e.DBKeys=n,e.DBOperations=h,e.DEFAULT_ERROR_MESSAGES=l,e.DEFAULT_TIMESTAMP_FORMAT=c,e.DefaultContextFactory=ee,e.DefaultRepositoryFlags=X,e.DefaultSeparator=i,e.InternalError=T,e.NotFoundError=P,e.Operations=g,e.OperationsRegistry=E,e.PACKAGE_NAME=se,e.Repository=class extends ae{constructor(e){super(e)}async createPrefix(t,...r){const a=await te.args(e.OperationKeys.CREATE,this.class,r);if(t=new this.class(t),!1!==a.context.get("ignoreHandlers")&&await W(this,a.context,t,e.OperationKeys.CREATE,e.OperationKeys.ON),!a.context.get("ignoreValidation")){const e=await Promise.resolve(t.hasErrors());if(e)throw new A(e.toString())}return[t,...a.args]}async createAllPrefix(t,...r){const a=await te.args(e.OperationKeys.CREATE,this.class,r),o=!1!==a.context.get("ignoreHandlers"),s=!a.context.get("ignoreValidation");if(t=await Promise.all(t.map(async t=>{const r=new this.class(t);return o&&await W(this,a.context,r,e.OperationKeys.CREATE,e.OperationKeys.ON),r})),s){const e=J(await Promise.all(t.map(e=>Promise.resolve(e.hasErrors()))));if(e)throw new A(e)}return[t,...a.args]}async updatePrefix(t,...a){const o=await te.args(e.OperationKeys.UPDATE,this.class,a),s=!1!==o.context.get("ignoreHandlers"),n=!o.context.get("ignoreValidation"),i=t[this.pk];if(!i)throw new T("No value for the Id is defined under the property "+this.pk);const c=await this.read(i);if(t=r.Model.merge(c,t,this.class),s&&await W(this,o.context,t,e.OperationKeys.UPDATE,e.OperationKeys.ON,c),n){const e=await Promise.resolve(t.hasErrors(c));if(e)throw new A(e.toString())}return[t,...o.args]}async updateAllPrefix(t,...a){const o=await te.args(e.OperationKeys.UPDATE,this.class,a),s=!1!==o.context.get("ignoreHandlers"),n=!o.context.get("ignoreValidation"),i=t.map(e=>{const t=e[this.pk];if(void 0===t)throw new T("No value for the Id is defined under the property "+this.pk);return t}),c=await this.readAll(i,...o.args);if(t=t.map((e,t)=>r.Model.merge(c[t],e,this.class)),s&&await Promise.all(t.map((t,r)=>W(this,o.context,t,e.OperationKeys.UPDATE,e.OperationKeys.ON,c[r]))),n){const e=J(await Promise.all(t.map((e,t)=>Promise.resolve(e.hasErrors(c[t])))));if(e)throw new A(e)}return[t,...o.args]}async readPrefix(e,...t){return super.readPrefix(e,...t)}async readAllPrefix(e,...t){return super.readAllPrefix(e,...t)}async deleteAllPrefix(e,...t){return super.deleteAllPrefix(e,...t)}},e.SerializationError=w,e.UpdateValidationKeys=d,e.UpdateValidator=p,e.VERSION=oe,e.ValidationError=A,e.after=N,e.afterAny=(e,t,r)=>N(h.ALL,e,t,r),e.afterCreate=(e,t,r)=>N(h.CREATE,e,t,r),e.afterCreateUpdate=(e,t,r)=>N(h.CREATE_UPDATE,e,t,r),e.afterDelete=(e,t,r)=>N(h.DELETE,e,t,r),e.afterRead=(e,t,r)=>N(h.READ,e,t,r),e.afterUpdate=(e,t,r)=>N(h.UPDATE,e,t,r),e.composed=(e,t=i,r=!1,a="",o="",s={priority:55})=>G(e,r,t,"values",a,o,s),e.composedFromCreateUpdate=z,e.composedFromKeys=(e,t=i,r=!1,a="",o="",s={priority:55})=>G(e,r,t,"keys",a,o,s),e.enforceDBDecorators=W,e.getDbDecorators=Z,e.getHandlerArgs=R,e.getHandlersDecorators=K,e.getValidatableUpdateProps=_,e.groupDecorators=b,e.hash=q,e.hashOnCreateUpdate=B,e.id=()=>t.apply(r.required(),U(),(e,r)=>t.propMetadata(t.Metadata.key(n.ID,r),{})(e,r)),e.on=I,e.onAny=(e,t,r)=>I(h.ALL,e,t,r),e.onCreate=L,e.onCreateUpdate=v,e.onDelete=(e,t,r)=>I(h.DELETE,e,t,r),e.onRead=(e,t,r)=>I(h.READ,e,t,r),e.onUpdate=S,e.operation=C,e.prefixMethod=(e,t,r,a)=>{const o=a||t.name;e[o]=new Proxy(e[o],{apply:async(e,t,a)=>{let o=r.call(t,...a);return o instanceof Promise&&(o=await o),o=e.call(t,...o),o instanceof Promise&&(o=await o),o}})},e.readonly=U,e.reduceErrorsToPrint=J,e.serialize=()=>t.apply(v(V),N(h.ALL,F),r.type([String,Object]),t.metadata(n.SERIALIZE,{})),e.serializeAfterAll=F,e.serializeOnCreateUpdate=V,e.sortDecorators=x,e.storeHandlerMetadata=k,e.suffixMethod=(e,t,r,a)=>{const o=a||t.name;e[o]=new Proxy(e[o],{apply:async(e,t,a)=>{let o=e.call(t,...a);return o instanceof Promise&&(o=await o),o=r.call(t,...o),o instanceof Promise&&(o=await o),o}})},e.timestamp=(a=h.CREATE_UPDATE,o=c)=>{const s=r.Validation.updateKey(n.TIMESTAMP);return t.Decoration.for(s).define({decorator:(a,o)=>{const i=[r.date(o,l.TIMESTAMP.DATE),r.required(l.TIMESTAMP.REQUIRED),t.propMetadata(r.Validation.key(n.TIMESTAMP),{operation:a,format:o}),I(a,j)];return-1!==a.indexOf(e.OperationKeys.UPDATE)?i.push(t.propMetadata(s,{message:l.TIMESTAMP.INVALID})):i.push(U()),t.apply(...i)},args:[a,o]}).apply()},e.timestampHandler=j,e.transient=()=>t.Decoration.for(n.TRANSIENT).define((e,r)=>{t.propMetadata(n.TRANSIENT,!0)(e.constructor),t.propMetadata(t.Metadata.key(n.TRANSIENT,r),{})(e,r)}).apply(),e.validateCompare=Y,e.validateDecorator=$,e.validateDecorators=H,e.version=()=>{const a=n.VERSION;return t.Decoration.for(a).define(r.type(Number),L(Q(e.OperationKeys.CREATE)),S(Q(e.OperationKeys.UPDATE)),t.propMetadata(a,!0)).apply()},e.versionCreateUpdate=Q,e.wrapMethodWithContext=re},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@decaf-ts/decoration"),require("@decaf-ts/decorator-validation"),require("tslib"),require("typed-object-accumulator"),require("@decaf-ts/logging")):"function"==typeof define&&define.amd?define(["exports","@decaf-ts/decoration","@decaf-ts/decorator-validation","tslib","typed-object-accumulator","@decaf-ts/logging"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["db-decorators"]={},e.decafTsDecoration,e.decafTsDecoratorValidation,e.tslib,e.typedObjectAccumulator,e.decafTsLogging);
|
|
2
2
|
//# sourceMappingURL=db-decorators.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-decorators.cjs","sources":["../src/model/constants.ts","../src/validation/constants.ts","../src/validation/validators/ReadOnlyValidator.ts","../src/validation/validators/TimestampValidator.ts","../src/validation/validators/UpdateValidator.ts","../src/operations/constants.ts","../src/validation/validation.ts","../src/operations/OperationsRegistry.ts","../src/operations/Operations.ts","../src/repository/errors.ts","../src/repository/utils.ts","../src/operations/decorators.ts","../src/validation/decorators.ts","../src/model/validation.ts","../src/model/decorators.ts","../src/overrides/overrides.ts","../src/repository/constants.ts","../src/repository/Context.ts","../src/repository/wrappers.ts","../src/repository/BaseRepository.ts","../src/index.ts","../src/repository/Repository.ts","../src/identity/decorators.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],"names":["DBKeys","REFLECT","ModelKeys","MODEL","REPOSITORY","CLASS","ID","INDEX","UNIQUE","SERIALIZE","READONLY","TIMESTAMP","TRANSIENT","HASH","COMPOSED","VERSION","ORIGINAL","DefaultSeparator","DEFAULT_TIMESTAMP_FORMAT","DEFAULT_ERROR_MESSAGES","INVALID","REQUIRED","DATE","UpdateValidationKeys","ReadOnlyValidator","Validator","constructor","super","hasErrors","value","args","updateHasErrors","oldValue","message","undefined","isEqual","this","getMessage","exports","__decorate","validator","TimestampValidator","Date","e","UpdateValidator","DecoratorMessages","DEFAULT","acceptedTypes","OperationKeys","ModelOperations","BulkCrudOperationKeys","Validation","updateKey","key","DBOperations","CREATE","READ","UPDATE","DELETE","CREATE_UPDATE","READ_CREATE","ALL","OperationsRegistry","cache","get","target","propKey","operation","accum","name","unshift","Object","values","prototype","getPrototypeOf","proto","register","handler","handlerName","Operations","getHandlerName","Hashing","hash","toString","str","targetName","registry","getOpRegistry","BaseError","Error","msg","code","stack","BadRequestError","ValidationError","InternalError","SerializationError","NotFoundError","ConflictError","getHandlerArgs","dec","prop","m","props","handlers","async","enforceDBDecorators","repo","context","model","prefix","oldModel","decorators","getDbDecorators","sortedDecorators","sortDecorators","groupDecorators","getHandlersDecorators","data","length","ON","push","apply","extraPrefix","replace","Metadata","OPERATIONS","keys","reduce","decorator","obj","filter","d","decs","defaultPriority","DefaultGroupSort","priority","handlerArgs","i","grouped","acc","group","set","Symbol","groupKey","has","existing","Map","groups","Array","from","forEach","combined","map","sort","a","b","groupPriority","c","onCreateUpdate","groupsort","on","onUpdate","onCreate","op","after","AFTER","baseOp","dataToAdd","propertyKey","compoundKey","readOperation","handlerKey","mergeData","handle","propMetadata","storeHandlerMetadata","params","metadata","readonly","meta","description","Decoration","for","define","innerValidationDecorator","timestampHandler","timestamp","serializeOnCreateUpdate","JSON","stringify","serializeAfterAll","parse","getValidatableUpdateProps","propsToIgnore","decoratedProperties","hasOwnProperty","call","includes","validationFor","validateDecorator","newModel","toConditionalPromise","decoratorProps","maybeError","validateDecorators","result","decoratorKey","validationErrors","ValidationKeys","LIST","newPropValue","oldPropValue","newValues","Set","oldValues","allowedTypes","class","clazz","customTypes","flat","t","String","toLowerCase","errs","childValue","id","Model","pk","oldListModel","find","el","isModel","Promise","all","then","every","r","allEmpty","promises","resolvedValues","res","val","validateCompare","ValidatableUpdateProps","nestedErrors","propValue","designTypes","designType","getPropDesignTypes","some","TYPE","isArray","propErrors","isConstr","isPropertyModel","instance","Constr","entries","error","ModelErrorDefinition","merged","allSettled","results","parentProp","nestedErrPromise","nestedPropDecErrors","nestedProp","nestedPropDecError","join","status","reason","hashOnCreateUpdate","composedFromCreateUpdate","type","suffix","separator","composed","arg","composedFrom","hashResult","versionCreateUpdate","isTransient","decoratorValidation","previousVersion","exclusions","isAsync","validate","resolve","resolvedErrs","segregate","validatableProperties","transientProps","transient","build","keyValue","constr","idProp","bind","decoration","saveOperation","DefaultRepositoryFlags","parentContext","childContexts","ignoredValidationProperties","callArgs","writeOperation","affectedTables","breakOnHandlerError","rebuildWithTransient","DefaultContextFactory","Context","accumulate","assign","ObjectAccumulator","defineProperty","writable","enumerable","configurable","factory","parent","childFrom","overrides","contextual","last","pop","getContext","wrapMethodWithContext","before","method","methodName","Proxy","thisArg","argArray","transformedArgs","BaseRepository","_class","_pk","_pkProps","pkProps","self","create","read","update","delete","createAll","models","createPrefix","contextArgs","createSuffix","createAllPrefix","createAllSuffix","readAll","readSuffix","readPrefix","readAllPrefix","k","readAllSuffix","updateAll","updateSuffix","updatePrefix","updateAllPrefix","updateAllSuffix","deleteAll","deleteSuffix","deletePrefix","deleteAllPrefix","deleteAllSuffix","merge","extract","PACKAGE_NAME","registerLibrary","operations","BLOCK","errors","ids","oldModels","required","afterName","beforeName","format","date","indexOf","attribute","Number"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db-decorators.cjs","sources":["../src/model/constants.ts","../src/validation/constants.ts","../src/validation/validators/ReadOnlyValidator.ts","../src/validation/validators/TimestampValidator.ts","../src/validation/validators/UpdateValidator.ts","../src/operations/constants.ts","../src/validation/validation.ts","../src/operations/OperationsRegistry.ts","../src/operations/Operations.ts","../src/repository/errors.ts","../src/operations/decorators.ts","../src/validation/decorators.ts","../src/model/validation.ts","../src/model/decorators.ts","../src/repository/utils.ts","../src/overrides/overrides.ts","../src/repository/constants.ts","../src/repository/Context.ts","../src/repository/wrappers.ts","../src/repository/BaseRepository.ts","../src/index.ts","../src/repository/Repository.ts","../src/identity/decorators.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],"names":["DBKeys","REFLECT","ModelKeys","MODEL","REPOSITORY","CLASS","ID","INDEX","UNIQUE","SERIALIZE","READONLY","TIMESTAMP","TRANSIENT","HASH","COMPOSED","VERSION","ORIGINAL","DefaultSeparator","DEFAULT_TIMESTAMP_FORMAT","DEFAULT_ERROR_MESSAGES","INVALID","REQUIRED","DATE","UpdateValidationKeys","ReadOnlyValidator","Validator","constructor","super","hasErrors","value","args","updateHasErrors","oldValue","message","undefined","isEqual","this","getMessage","exports","__decorate","validator","TimestampValidator","Date","e","UpdateValidator","DecoratorMessages","DEFAULT","acceptedTypes","OperationKeys","ModelOperations","BulkCrudOperationKeys","Validation","updateKey","key","DBOperations","CREATE","READ","UPDATE","DELETE","CREATE_UPDATE","READ_CREATE","ALL","OperationsRegistry","cache","get","target","propKey","operation","accum","name","unshift","Object","values","prototype","getPrototypeOf","proto","register","handler","handlerName","Operations","getHandlerName","Hashing","hash","toString","str","targetName","registry","getOpRegistry","BaseError","Error","msg","code","stack","BadRequestError","ValidationError","InternalError","SerializationError","NotFoundError","ConflictError","DefaultGroupSort","priority","getHandlerArgs","dec","prop","m","props","handlers","getHandlersDecorators","model","decorators","prefix","decs","length","handlerArgs","i","data","push","groupDecorators","grouped","reduce","acc","group","set","Symbol","groupKey","has","existing","Map","groups","Array","from","forEach","combined","map","d","sort","a","b","groupPriority","c","sortDecorators","onCreateUpdate","groupsort","on","onUpdate","onCreate","op","ON","after","AFTER","baseOp","dataToAdd","propertyKey","compoundKey","Metadata","readOperation","handlerKey","mergeData","keys","filter","handle","propMetadata","OPERATIONS","apply","storeHandlerMetadata","params","metadata","readonly","meta","description","async","Decoration","for","define","decorator","innerValidationDecorator","timestampHandler","context","timestamp","serializeOnCreateUpdate","JSON","stringify","serializeAfterAll","parse","getValidatableUpdateProps","propsToIgnore","decoratedProperties","hasOwnProperty","call","includes","validationFor","validateDecorator","newModel","oldModel","toConditionalPromise","decoratorProps","maybeError","validateDecorators","result","decoratorKey","validationErrors","ValidationKeys","LIST","newPropValue","oldPropValue","newValues","Set","oldValues","allowedTypes","class","clazz","customTypes","flat","t","String","toLowerCase","errs","childValue","id","Model","pk","oldListModel","find","el","isModel","Promise","all","then","every","r","allEmpty","promises","resolvedValues","res","val","validateCompare","ValidatableUpdateProps","nestedErrors","propValue","designTypes","designType","getPropDesignTypes","some","TYPE","isArray","propErrors","isConstr","isPropertyModel","instance","Constr","entries","error","ModelErrorDefinition","merged","allSettled","results","parentProp","nestedErrPromise","nestedPropDecErrors","nestedProp","nestedPropDecError","join","status","reason","hashOnCreateUpdate","composedFromCreateUpdate","type","suffix","separator","composed","arg","composedFrom","hashResult","versionCreateUpdate","reduceErrorsToPrint","errors","enforceDBDecorators","repo","getDbDecorators","sortedDecorators","extraPrefix","replace","obj","isTransient","decoratorValidation","previousVersion","exclusions","isAsync","validate","resolve","resolvedErrs","segregate","validatableProperties","transientProps","transient","build","keyValue","constr","idProp","bind","pkProps","merge","extract","assign","decoration","saveOperation","DefaultRepositoryFlags","parentContext","childContexts","ignoredValidationProperties","callArgs","writeOperation","affectedTables","breakOnHandlerError","rebuildWithTransient","ignoreValidation","ignoreHandlers","DefaultContextFactory","Context","accumulate","logger","Logging","ObjectAccumulator","defineProperty","writable","enumerable","configurable","factory","parent","childFrom","overrides","contextual","last","pop","getContext","wrapMethodWithContext","before","method","methodName","Proxy","thisArg","argArray","transformedArgs","BaseRepository","_class","self","create","read","update","delete","createAll","models","createPrefix","contextArgs","createSuffix","createAllPrefix","createAllSuffix","readAll","readSuffix","readPrefix","readAllPrefix","k","readAllSuffix","updateAll","updateSuffix","updatePrefix","updateAllPrefix","updateAllSuffix","deleteAll","deleteSuffix","deletePrefix","deleteAllPrefix","deleteAllSuffix","PACKAGE_NAME","registerLibrary","operations","BLOCK","shouldRunHandlers","shouldValidate","ids","oldModels","required","afterName","beforeName","format","date","indexOf","attribute","Number"],"mappings":"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"}
|
package/dist/db-decorators.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Metadata as t,propMetadata as e,apply as r,metadata as s,Decoration as n}from"@decaf-ts/decoration";import{ModelKeys as a,validator as o,Validator as i,isEqual as c,DEFAULT_ERROR_MESSAGES as l,Validation as u,Hashing as p,innerValidationDecorator as d,type as h,date as f,required as E,toConditionalPromise as y,ValidationKeys as m,Model as A,ModelErrorDefinition as g,validate as T}from"@decaf-ts/decorator-validation";import{__decorate as w,__metadata as P}from"tslib";import{ObjectAccumulator as O}from"typed-object-accumulator";const R={REFLECT:a.MODEL+".persistence.",REPOSITORY:"repository",CLASS:"_class",ID:"id",INDEX:"index",UNIQUE:"unique",SERIALIZE:"serialize",READONLY:"readonly",TIMESTAMP:"timestamp",TRANSIENT:"transient",HASH:"hash",COMPOSED:"composed",VERSION:"version",ORIGINAL:"__originalObj"},D="_",S="dd/MM/yyyy HH:mm:ss:S",b={ID:{INVALID:"This Id is invalid",REQUIRED:"The Id is mandatory"},READONLY:{INVALID:"This cannot be updated"},TIMESTAMP:{REQUIRED:"Timestamp is Mandatory",DATE:"The Timestamp must the a valid date",INVALID:"This value must always increase"}},L={REFLECT:"db.update.validation.",TIMESTAMP:R.TIMESTAMP,READONLY:R.READONLY};let v=class extends i{constructor(){super(b.READONLY.INVALID)}hasErrors(t,...e){}updateHasErrors(t,e,r){if(void 0!==t)return c(t,e)?void 0:this.getMessage(r||this.message)}};v=w([o(L.READONLY),P("design:paramtypes",[])],v);let I=class extends i{constructor(){super(b.TIMESTAMP.INVALID)}hasErrors(t,...e){}updateHasErrors(t,e,r){if(void 0!==t){r=r||this.getMessage(r||this.message);try{t=new Date(t),e=new Date(e)}catch(t){return r}return t>e?void 0:r}}};I=w([o(L.TIMESTAMP),P("design:paramtypes",[])],I);class N extends i{constructor(t=l.DEFAULT,...e){super(t,...e)}}var k,x,C;u.updateKey=t=>L.REFLECT+t,(t=>{t.REFLECT="decaf.model.db.operations.",t.CREATE="create",t.READ="read",t.UPDATE="update",t.DELETE="delete",t.ON="on.",t.AFTER="after.",t.BLOCK="block"})(k||(k={})),(t=>{t.OPERATIONS="operations",t.RELATIONS="relations"})(x||(x={})),(t=>{t.CREATE_ALL="createAll",t.READ_ALL="readAll",t.UPDATE_ALL="updateAll",t.DELETE_ALL="deleteAll"})(C||(C={}));const j={CREATE:[k.CREATE],READ:[k.READ],UPDATE:[k.UPDATE],DELETE:[k.DELETE],CREATE_UPDATE:[k.CREATE,k.UPDATE],READ_CREATE:[k.READ,k.CREATE],ALL:[k.CREATE,k.READ,k.UPDATE,k.DELETE]};class M{constructor(){this.cache={}}get(t,e,r,s){let n;s=s||[];try{n="string"==typeof t?t:t.constructor.name,s.unshift(...Object.values(this.cache[n][e][r]||[]))}catch(e){if("string"==typeof t||t===Object.prototype||Object.getPrototypeOf(t)===Object.prototype)return s}let a=Object.getPrototypeOf(t);return a.constructor.name===n&&(a=Object.getPrototypeOf(a)),this.get(a,e,r,s)}register(t,e,r,s){const n=r.constructor.name,a=U.getHandlerName(t);this.cache[n]||(this.cache[n]={}),this.cache[n][s]||(this.cache[n][s]={}),this.cache[n][s][e]||(this.cache[n][s][e]={}),this.cache[n][s][e][a]||(this.cache[n][s][e][a]=t)}}class U{constructor(){}static getHandlerName(t){return t.name?t.name:p.hash(t.toString())}static key(t){return k.REFLECT+t}static get(t,e,r){return U.registry.get(t,e,r)}static getOpRegistry(){return U.registry||(U.registry=new M),U.registry}static register(t,e,r,s){U.getOpRegistry().register(t,e,r,s)}}class $ extends Error{constructor(t,e,r){if(e instanceof $)return e;super(`[${t}] ${e instanceof Error?e.message:e}`),this.code=r,e instanceof Error&&(this.stack=e.stack)}}class F extends ${constructor(t,e=F.name,r=400){super(e,t,r)}}class _ extends F{constructor(t){super(t,_.name,422)}}class H extends ${constructor(t,e=H.name,r=500){super(e,t,r)}}class V extends H{constructor(t){super(t,V.name,500)}}class Y extends F{constructor(t){super(t,Y.name,404)}}class z extends F{constructor(t){super(t,z.name,409)}}const K=(t,e,r,s)=>{const n=r.constructor.name;if(!n)throw new H("Could not determine model class");s=s||{},t.props.handlers[n]&&t.props.handlers[n][e]&&(s={...t.props.handlers[n][e],...s});let a=Object.getPrototypeOf(r);return a===Object.prototype?s:(a.constructor.name===n&&(a=Object.getPrototypeOf(a)),K(t,e,a,s))};async function Q(t,e,r,s,n,a){const o=G(r,s,n);if(!o)return;const i=W(Z(J(r,o,n)));for(const o of i){const i=[e,o.data.length>1?o.data:o.data[0],o.prop.length>1?o.prop:o.prop[0],r];if(s===k.UPDATE&&n===k.ON){if(!a)throw new H("Missing old model for update operation");i.push(a)}try{await o.handler.apply(t,i)}catch(t){const s=`Failed to execute handler ${o.handler.name} for ${o.prop} on ${r.constructor.name} due to error: ${t}`;if(e.get("breakOnHandlerError"))throw new H(s)}}}function G(e,r,s){const n=s?.replace(/[.]$/,""),a=t.get(e.constructor,x.OPERATIONS);if(a)return Object.keys(a).reduce((t,e)=>{const s=n?a[e][n]||{}:a[e],o=Object.keys(s).filter(t=>t===r),i=[];for(const t of o)i.push({key:t,props:s[t]});return i&&i.length&&(t||(t={}),t[e]=i),t},void 0)}const q=50,B={priority:q};function J(t,e,r){const s=[];for(const n in e){const a=e[n];for(const e of a){const{key:a}=e,o=U.get(t,n,r+a);if(!o||!o.length)throw new H(`Could not find registered handler for the operation ${r+a} under property ${n}`);const i=K(e,n,t);if(!i||Object.values(i).length!==o.length)throw new H("Args and handlers length do not match");for(let t=0;t<o.length;t++){const e=i[o[t].name].data;s.push({handler:o[t],data:[e],prop:[n]})}}}return s}function Z(t){const e=t.reduce((t,e)=>{if(!e||!e.data||!e.prop)throw new H("Missing decorator properties or data");if(!e.data[0].group)return t.set(Symbol(),e),t;const r=e.data[0].group;if(t.has(r)){const s=t.get(r);t.set(r,{handler:s.handler,data:[...s.data,...e.data],prop:[...s.prop,...e.prop]})}else t.set(r,{...e});return t},new Map),r=Array.from(e.values());return r.forEach(t=>{const e=t.data.map((e,r)=>({data:e,prop:t.prop[r]}));e.sort((t,e)=>(t.data.groupPriority??50)-(e.data.groupPriority??50)),t.data=e.map(t=>t.data),t.prop=e.map(t=>t.prop)}),r}function W(t){return t.sort((t,e)=>(t.data[0].priority??q)-(e.data[0].priority??q)),t}function X(t,e,r){return at(j.CREATE_UPDATE,t,e,r)}function tt(t,e,r){return at(j.UPDATE,t,e,r)}function et(t,e,r){return at(j.CREATE,t,e,r)}function rt(t,e,r){return at(j.READ,t,e,r)}function st(t,e,r){return at(j.DELETE,t,e,r)}function nt(t,e,r){return at(j.ALL,t,e,r)}function at(t=j.ALL,e,r,s){return ht(k.ON,t,e,r,s)}function ot(t,e,r){return dt(j.CREATE_UPDATE,t,e,r)}function it(t,e,r){return dt(j.UPDATE,t,e,r)}function ct(t,e,r){return dt(j.CREATE,t,e,r)}function lt(t,e,r){return dt(j.READ,t,e,r)}function ut(t,e,r){return dt(j.DELETE,t,e,r)}function pt(t,e,r){return dt(j.ALL,t,e,r)}function dt(t=j.ALL,e,r,s){return ht(k.AFTER,t,e,r,s)}function ht(s,n=j.ALL,a,o,i=B){return(c,l)=>{const u=c.constructor.name,p=n.reduce((r,n)=>{const p=s+n;let d=t.readOperation(c.constructor,l,p);d||(d={operation:n,handlers:{}});const h=U.getHandlerName(a);let f=i;if(o){if(Object.keys(o).filter(t=>t in i).length>0)throw new H("Unable to merge groupSort into dataToAdd due to overlaping keys");f={...i,...o}}return d.handlers[u]&&d.handlers[u][l]&&h in d.handlers[u][l]||(d.handlers[u]=d.handlers[u]||{},d.handlers[u][l]=d.handlers[u][l]||{},d.handlers[u][l][h]={data:f},r.push(((t,e)=>(r,s)=>{U.register(e,t,r,s)})(p,a),e(t.key(x.OPERATIONS,l,p),d))),r},[]);return r(...p)(c,l)}}function ft(t,e){return(...r)=>s(t,{args:r,handler:e})}const Et=t=>ft(k.REFLECT+k.BLOCK,(t,e)=>t.includes(e))(t);function yt(t=b.READONLY.INVALID){const e=R.READONLY,r={message:t,description:"defines the attribute as readOnly",async:!1};return n.for(e).define({decorator:d,args:[yt,e,r]}).apply()}async function mt(t,e,r,s){s[r]=t.timestamp}function At(t=j.CREATE_UPDATE,s=S){const a=u.updateKey(R.TIMESTAMP);return n.for(a).define({decorator:(t,s)=>{const n=[f(s,b.TIMESTAMP.DATE),E(b.TIMESTAMP.REQUIRED),e(u.key(R.TIMESTAMP),{operation:t,format:s}),at(t,mt)];return-1!==t.indexOf(k.UPDATE)?n.push(e(a,{message:b.TIMESTAMP.INVALID})):n.push(yt()),r(...n)},args:[t,s]}).apply()}async function gt(t,e,r,s){if(s[r])try{s[r]=JSON.stringify(s[r])}catch(t){throw new V(`Failed to serialize ${r.toString()} property of model ${s.constructor.name}: e`)}}async function Tt(t,e,r,s){if(s[r]&&"string"==typeof s[r])try{s[r]=JSON.parse(s[r])}catch(t){throw new V(`Failed to deserialize ${r.toString()} property of model ${s.constructor.name}: ${t}`)}}function wt(){return r(X(gt),dt(j.ALL,Tt),h([String,Object]),s(R.SERIALIZE,{}))}function Pt(){return r(E(),yt(),(r,s)=>e(t.key(R.ID,s),{})(r,s))}function Ot(e,r){const s=[];for(const n in e){if(!Object.prototype.hasOwnProperty.call(e,n)||r.includes(n))continue;const a=t.validationFor(e.constructor,n)||{};s.push({prop:n,decorators:a})}return s}function Rt(t,e,r,s,n){const a=u.get(s.key);if(!a)throw Error("Missing validator for "+s.key);if(!a.updateHasErrors)return y(void 0,n);if(!n&&s.async)return y(void 0,n);const o=Object.values(s)||{},i=a.updateHasErrors(t[r],e[r],...o);return y(i,n)}function Dt(t,e,r,s,n){const a={};for(const o in s){const i={...s[o],key:o};if(!n&&i.async)continue;let c=Rt(t,e,r,i,n);if(i.key===m.LIST&&(!c||n)){const s=t[r],a=e[r],o=s instanceof Set?[...s]:s,l=a instanceof Set?[...a]:a;if(o?.length){const t=[i.class||i.clazz||i.customTypes].flat().map(t=>((t=(t="function"!=typeof t||t.name?t:t()).name?t.name:t)+"").toLowerCase()),e=o.map(e=>{const r=A.pk(e,!0);if(!r)return"Failed to find model id";const s=l.find(t=>r===A.pk(t,!0));return A.isModel(e)?e.hasErrors(s):t.includes(typeof e)?void 0:"Value has no validatable type"});if(n)c=Promise.all(e).then(t=>t.every(t=>!t)?void 0:t);else{const t=e.every(t=>!t);c=e.length>0&&!t?e:void 0}}}c&&(a[i.key]=c)}if(!n)return Object.keys(a).length>0?a:void 0;const o=Object.keys(a),i=Object.values(a);return Promise.all(i).then(t=>{const e={};for(let r=0;r<t.length;r++){const s=t[r];void 0!==s&&(e[o[r]]=s)}return Object.keys(e).length>0?e:void 0})}function St(e,r,s,...n){const o=Ot(r,n),i={},c={};for(const{prop:n,decorators:l}of o){const o=n+"",u=r[n],{designTypes:p,designType:d}=t.getPropDesignTypes(r.constructor,n);if(!p)continue;if(p.some(t=>[Array.name,Set.name].includes(t))){if(!l||!Object.keys(l).includes(m.LIST)){i[o]={[m.TYPE]:`Array or Set property '${o}' requires a @list decorator`};continue}if(u&&!(Array.isArray(u)||u instanceof Set)){i[o]={[m.TYPE]:`Property '${n+""}' must be either an Array or a Set`};continue}}const h=Dt(r,e,o,l,s)||{},f=A.isPropertyModel(r,o);if(null!=u&&f){const t=u,r=(Array.isArray(d)?d:[d]).map(t=>("function"!=typeof t||t.name||(t=t()),A.get(t.name||t))).find(t=>!!t);r&&t instanceof r?c[o]=t.hasErrors(e[n]):(h[m.TYPE]=r?"Value must be an instance of "+r.name:`Unable to verify type consistency, missing model registry for ${p.toString()} on prop ${o}`,delete h[a.TYPE])}(Object.keys(h).length>0||s)&&(i[o]=h),s||Object.entries(c[o]||{}).forEach(([t,e])=>{void 0!==e&&(i[`${o}.${t}`]=e)})}if(!s)return Object.keys(i).length>0?new g(i):void 0;const l=i,u=Object.keys(l),p=Object.values(l);return Promise.allSettled(p).then(async t=>{const e={};for(const[t,r]of Object.entries(c)){const s=await r;s&&Object.entries(s).forEach(([r,s])=>{void 0!==s&&(e[[t,r].join(".")]=s)})}for(let r=0;r<t.length;r++){const s=u[r],n=t[r];"fulfilled"===n.status&&void 0!==n.value?e[s]=n.value:"rejected"===n.status&&(e[s]=n.reason instanceof Error?n.reason.message:(n.reason||"Validation failed")+"")}return Object.keys(e).length>0?new g(e):void 0})}function bt(t,e,r,s,n){if(void 0===s[r])return;const a=p.hash(s[r]);n&&s[r]===a||(s[r]=a)}function Lt(){return r(X(bt),e(R.HASH,{}))}function vt(t,e,r,s){try{const{args:t,type:n,prefix:a,suffix:o,separator:i}=e,c=t.map(e=>{if(!(e in s))throw new H(`Property ${e} not found to compose from`);if("keys"===n)return e;if(void 0===s[e])throw new H(`Property ${t} does not contain a value to compose from`);return s[e].toString()});a&&c.unshift(a),o&&c.push(o),s[r]=c.join(i)}catch(t){throw new H("Failed to compose value: "+t)}}function It(t,s=!1,n=D,a="values",o="",i="",c={priority:55}){const l={args:t,hashResult:s,separator:n,type:a,prefix:o,suffix:i},u=[X(vt,l,c),e(R.COMPOSED,l)];return s&&u.push(Lt()),r(...u)}function Nt(t,e=D,r=!1,s="",n="",a={priority:55}){return It(t,r,e,"keys",s,n,a)}function kt(t,e=D,r=!1,s="",n="",a={priority:55}){return It(t,r,e,"values",s,n,a)}function xt(t){return(e,r,s,n)=>{try{switch(t){case k.CREATE:n[s]=1;break;case k.UPDATE:n[s]++;break;default:throw new H("Invalid operation: "+t)}}catch(t){throw new H("Failed to update version: "+t)}}}function Ct(){const t=R.VERSION;return n.for(t).define(h(Number),et(xt(k.CREATE)),tt(xt(k.UPDATE)),e(t,!0)).apply()}function jt(){return n.for(R.TRANSIENT).define((r,s)=>{e(R.TRANSIENT,!0)(r.constructor),e(t.key(R.TRANSIENT,s),{})(r,s)}).apply()}A.prototype.isTransient=function(){return t.isTransient(this)},A.prototype.hasErrors=function(t,...e){!t||t instanceof A||(e.unshift(t),t=void 0);const r=this.isAsync(),s=T(this,r,...e);return r?Promise.resolve(s).then(s=>s||!t?s:St(t,this,r,...e)):s||!t?s:St(t,this,r,...e)},A.prototype.segregate=function(){return A.segregate(this)},A.segregate=e=>{if(!t.isTransient(e))return{model:e};const r=t.validatableProperties(e.constructor),s=t.get(e.constructor,R.TRANSIENT),n={model:{},transient:{}};for(const t of r)if(Object.keys(s).includes(t)){n.transient=n.transient||{};try{n.transient[t]=e[t]}catch(e){throw new V(`Failed to serialize transient property ${t}: ${e}`)}}else n.model=n.model||{},n.model[t]=e[t];return n.model=A.build(n.model,e.constructor.name),n},A.pk=((e,r=!1)=>{if(!e)throw Error("No model was provided");const s=e instanceof A?e.constructor:e,n=t.get(s,R.ID);if(!n)throw Error("No Id property defined for model "+(s?.name||"Unknown Model"));const a=Object.keys(n)[0];if(!r)return a;if(e instanceof A)return e[a];throw Error("Cannot get the value of the pk from the constructor")}).bind(A),A.isTransient=(e=>t.isTransient(e)).bind(A),t.saveOperation=((e,r,s,n)=>{r&&t.set(e,t.key(x.OPERATIONS,r,s),n)}).bind(t),t.readOperation=((e,r,s)=>{if(r&&s)return t.get(e,t.key(x.OPERATIONS,r,s))}).bind(t),t.isTransient=(e=>!!t.get("function"!=typeof e?e.constructor:e,R.TRANSIENT)).bind(t);const Mt={parentContext:void 0,childContexts:[],ignoredValidationProperties:[],callArgs:[],writeOperation:!1,affectedTables:[],operation:void 0,breakOnHandlerError:!0,rebuildWithTransient:!0},Ut=t=>(new $t).accumulate(Object.assign({},t,{timestamp:new Date}));class $t{constructor(){this.cache=new O,Object.defineProperty(this,"cache",{value:new O,writable:!1,enumerable:!1,configurable:!0})}static{this.factory=Ut}accumulate(t){return Object.defineProperty(this,"cache",{value:this.cache.accumulate(t),writable:!1,enumerable:!1,configurable:!0}),this}get timestamp(){return this.cache.timestamp}get(t){try{return this.cache.get(t)}catch(e){const r=this.cache.parentContext;if(r)return r.get(t);throw e}}static childFrom(t,e){return $t.factory(Object.assign({},t.cache,e||{}))}static async from(t,e,r,...s){return $t.factory(Object.assign({},Mt,e,{operation:t,model:r}))}static async args(t,e,r,s,n){const a=r.pop();async function o(){return s?s.context(t,n||{},e,...r):$t.from(t,n||{},e,...r)}let i;return a?a instanceof $t?(i=a,r.push(a)):(r.push(a),i=await o(),r.push(i)):(i=await o(),r.push(i)),{context:i,args:r}}}function Ft(t,e,r,s){const n=s||e.name;t[n]=new Proxy(t[n],{apply:async(t,e,s)=>{let n=r.call(e,...s);return n instanceof Promise&&(n=await n),n=t.call(e,...n),n instanceof Promise&&(n=await n),n}})}function _t(t,e,r,s){const n=s||e.name;t[n]=new Proxy(t[n],{apply:async(t,e,s)=>{let n=t.call(e,...s);return n instanceof Promise&&(n=await n),n=r.call(e,...n),n instanceof Promise&&(n=await n),n}})}function Ht(t,e,r,s,n){const a=n||r.name;t[a]=new Proxy(t[a],{apply:async(t,r,n)=>{let a=e.call(r,...n);a instanceof Promise&&(a=await a);const o=a[a.length-1];if(!(o instanceof $t))throw new H("Missing a context");let i=t.call(r,...a);return i instanceof Promise&&(i=await i),i=s.call(r,i,o),i instanceof Promise&&(i=await i),i}})}class Vt{get class(){if(!this._class)throw new H("No class definition found for this repository");return this._class}get pk(){return this._pk||(this._pk=A.pk(this.class),this._pkProps=t.get(this.class,t.key(R.ID,this._pk))),this._pk}get pkProps(){return this._pkProps||this.pk,this._pkProps}constructor(t){t&&(this._class=t);const e=this;[this.create,this.read,this.update,this.delete].forEach(t=>{const r=t.name;Ht(e,e[r+"Prefix"],t,e[r+"Suffix"])})}async createAll(t,...e){return Promise.all(t.map(t=>this.create(t,...e)))}async createPrefix(t,...e){const r=await $t.args(k.CREATE,this.class,e);return t=new this.class(t),await Q(this,r.context,t,k.CREATE,k.ON),[t,...r.args]}async createSuffix(t,e){return await Q(this,e,t,k.CREATE,k.AFTER),t}async createAllPrefix(t,...e){const r=await $t.args(k.CREATE,this.class,e);return await Promise.all(t.map(async t=>(t=new this.class(t),await Q(this,r.context,t,k.CREATE,k.ON),t))),[t,...r.args]}async createAllSuffix(t,e){return await Promise.all(t.map(t=>Q(this,e,t,k.CREATE,k.AFTER))),t}async readAll(t,...e){return await Promise.all(t.map(t=>this.read(t,...e)))}async readSuffix(t,e){return await Q(this,e,t,k.READ,k.AFTER),t}async readPrefix(t,...e){const r=await $t.args(k.READ,this.class,e),s=new this.class;return s[this.pk]=t,await Q(this,r.context,s,k.READ,k.ON),[t,...r.args]}async readAllPrefix(t,...e){const r=await $t.args(k.READ,this.class,e);return await Promise.all(t.map(async t=>{const e=new this.class;return e[this.pk]=t,Q(this,r.context,e,k.READ,k.ON)})),[t,...r.args]}async readAllSuffix(t,e){return await Promise.all(t.map(t=>Q(this,e,t,k.READ,k.AFTER))),t}async updateAll(t,...e){return Promise.all(t.map(t=>this.update(t,...e)))}async updateSuffix(t,e){return await Q(this,e,t,k.UPDATE,k.AFTER),t}async updatePrefix(t,...e){const r=await $t.args(k.UPDATE,this.class,e),s=t[this.pk];if(!s)throw new H("No value for the Id is defined under the property "+this.pk);const n=await this.read(s);return await Q(this,r.context,t,k.UPDATE,k.ON,n),[t,...r.args]}async updateAllPrefix(t,...e){const r=await $t.args(k.UPDATE,this.class,e);return await Promise.all(t.map(t=>(t=new this.class(t),Q(this,r.context,t,k.UPDATE,k.ON),t))),[t,...r.args]}async updateAllSuffix(t,e){return await Promise.all(t.map(t=>Q(this,e,t,k.UPDATE,k.AFTER))),t}async deleteAll(t,...e){return Promise.all(t.map(t=>this.delete(t,...e)))}async deleteSuffix(t,e){return await Q(this,e,t,k.DELETE,k.AFTER),t}async deletePrefix(t,...e){const r=await $t.args(k.DELETE,this.class,e),s=await this.read(t,...r.args);return await Q(this,r.context,s,k.DELETE,k.ON),[t,...r.args]}async deleteAllPrefix(t,...e){const r=await $t.args(k.DELETE,this.class,e),s=await this.readAll(t,...r.args);return await Promise.all(s.map(async t=>Q(this,r.context,t,k.DELETE,k.ON))),[t,...r.args]}async deleteAllSuffix(t,e){return await Promise.all(t.map(t=>Q(this,e,t,k.DELETE,k.AFTER))),t}merge(t,e){const r=t=>Object.entries(t).reduce((t,[e,r])=>(void 0!==r&&(t[e]=r),t),{});return new this.class(Object.assign({},r(t),r(e)))}toString(){return this.class.name+" Repository"}}class Yt extends Vt{constructor(t){super(t)}async createPrefix(t,...e){const r=await $t.args(k.CREATE,this.class,e);t=new this.class(t),await Q(this,r.context,t,k.CREATE,k.ON);const s=await Promise.resolve(t.hasErrors());if(s)throw new _(s.toString());return[t,...r.args]}async createAllPrefix(t,...e){const r=await $t.args(k.CREATE,this.class,e);await Promise.all(t.map(async t=>(t=new this.class(t),await Q(this,r.context,t,k.CREATE,k.ON),t)));const s=(await Promise.all(t.map(t=>Promise.resolve(t.hasErrors())))).reduce((t,e,r)=>(e&&(t="string"==typeof t?t+`\n - ${r}: ${e.toString()}`:` - ${r}: ${e.toString()}`),t),void 0);if(s)throw new _(s);return[t,...r.args]}async updatePrefix(t,...e){const r=await $t.args(k.UPDATE,this.class,e),s=t[this.pk];if(!s)throw new H("No value for the Id is defined under the property "+this.pk);const n=await this.read(s);t=this.merge(n,t),await Q(this,r.context,t,k.UPDATE,k.ON,n);const a=await Promise.resolve(t.hasErrors(n));if(a)throw new _(a.toString());return[t,...r.args]}async updateAllPrefix(t,...e){const r=await $t.args(k.UPDATE,this.class,e),s=t.map(t=>{const e=t[this.pk];if(void 0===e)throw new H("No value for the Id is defined under the property "+this.pk);return e}),n=await this.readAll(s,...r.args);t=t.map((t,e)=>this.merge(n[e],t)),await Promise.all(t.map((t,e)=>Q(this,r.context,t,k.UPDATE,k.ON,n[e])));const a=(await Promise.all(t.map((t,e)=>Promise.resolve(t.hasErrors(n[e]))))).reduce((t,e,r)=>(e&&(t="string"==typeof t?t+`\n - ${r}: ${e.toString()}`:` - ${r}: ${e.toString()}`),t),void 0);if(a)throw new _(a);return[t,...r.args]}}const zt="##VERSION##",Kt="##PACKAGE##";t.registerLibrary(Kt,zt);export{F as BadRequestError,$ as BaseError,Vt as BaseRepository,Et as BlockOperations,C as BulkCrudOperationKeys,z as ConflictError,$t as Context,R as DBKeys,j as DBOperations,b as DEFAULT_ERROR_MESSAGES,S as DEFAULT_TIMESTAMP_FORMAT,Ut as DefaultContextFactory,Mt as DefaultRepositoryFlags,D as DefaultSeparator,H as InternalError,x as ModelOperations,Y as NotFoundError,k as OperationKeys,U as Operations,M as OperationsRegistry,Kt as PACKAGE_NAME,v as ReadOnlyValidator,Yt as Repository,V as SerializationError,I as TimestampValidator,L as UpdateValidationKeys,N as UpdateValidator,zt as VERSION,_ as ValidationError,dt as after,pt as afterAny,ct as afterCreate,ot as afterCreateUpdate,ut as afterDelete,lt as afterRead,it as afterUpdate,kt as composed,vt as composedFromCreateUpdate,Nt as composedFromKeys,Q as enforceDBDecorators,G as getDbDecorators,K as getHandlerArgs,J as getHandlersDecorators,Ot as getValidatableUpdateProps,Z as groupDecorators,Lt as hash,bt as hashOnCreateUpdate,Pt as id,at as on,nt as onAny,et as onCreate,X as onCreateUpdate,st as onDelete,rt as onRead,tt as onUpdate,ht as operation,Ft as prefixMethod,yt as readonly,wt as serialize,Tt as serializeAfterAll,gt as serializeOnCreateUpdate,W as sortDecorators,ft as storeHandlerMetadata,_t as suffixMethod,At as timestamp,mt as timestampHandler,jt as transient,St as validateCompare,Rt as validateDecorator,Dt as validateDecorators,Ct as version,xt as versionCreateUpdate,Ht as wrapMethodWithContext};
|
|
1
|
+
import{Metadata as t,propMetadata as e,apply as r,metadata as n,Decoration as s}from"@decaf-ts/decoration";import{ModelKeys as a,validator as o,Validator as i,isEqual as c,DEFAULT_ERROR_MESSAGES as l,Validation as u,Hashing as d,innerValidationDecorator as f,type as p,date as h,required as E,toConditionalPromise as g,ValidationKeys as y,Model as m,ModelErrorDefinition as A,validate as T}from"@decaf-ts/decorator-validation";import{__decorate as w,__metadata as P}from"tslib";import{ObjectAccumulator as O}from"typed-object-accumulator";import{Logging as R}from"@decaf-ts/logging";const D={REFLECT:a.MODEL+".persistence.",REPOSITORY:"repository",CLASS:"_class",ID:"id",INDEX:"index",UNIQUE:"unique",SERIALIZE:"serialize",READONLY:"readonly",TIMESTAMP:"timestamp",TRANSIENT:"transient",HASH:"hash",COMPOSED:"composed",VERSION:"version",ORIGINAL:"__originalObj"},x="_",b="dd/MM/yyyy HH:mm:ss:S",S={ID:{INVALID:"This Id is invalid",REQUIRED:"The Id is mandatory"},READONLY:{INVALID:"This cannot be updated"},TIMESTAMP:{REQUIRED:"Timestamp is Mandatory",DATE:"The Timestamp must the a valid date",INVALID:"This value must always increase"}},L={REFLECT:"db.update.validation.",TIMESTAMP:D.TIMESTAMP,READONLY:D.READONLY};let v=class extends i{constructor(){super(S.READONLY.INVALID)}hasErrors(t,...e){}updateHasErrors(t,e,r){if(void 0!==t)return c(t,e)?void 0:this.getMessage(r||this.message)}};v=w([o(L.READONLY),P("design:paramtypes",[])],v);let I=class extends i{constructor(){super(S.TIMESTAMP.INVALID)}hasErrors(t,...e){}updateHasErrors(t,e,r){if(void 0!==t){r=r||this.getMessage(r||this.message);try{t=new Date(t),e=new Date(e)}catch(t){return r}return t>e?void 0:r}}};I=w([o(L.TIMESTAMP),P("design:paramtypes",[])],I);class N extends i{constructor(t=l.DEFAULT,...e){super(t,...e)}}var k,C,j;u.updateKey=t=>L.REFLECT+t,(t=>{t.REFLECT="decaf.model.db.operations.",t.CREATE="create",t.READ="read",t.UPDATE="update",t.DELETE="delete",t.ON="on.",t.AFTER="after.",t.BLOCK="block"})(k||(k={})),(t=>{t.OPERATIONS="operations",t.RELATIONS="relations"})(C||(C={})),(t=>{t.CREATE_ALL="createAll",t.READ_ALL="readAll",t.UPDATE_ALL="updateAll",t.DELETE_ALL="deleteAll"})(j||(j={}));const M={CREATE:[k.CREATE],READ:[k.READ],UPDATE:[k.UPDATE],DELETE:[k.DELETE],CREATE_UPDATE:[k.CREATE,k.UPDATE],READ_CREATE:[k.READ,k.CREATE],ALL:[k.CREATE,k.READ,k.UPDATE,k.DELETE]};class U{constructor(){this.cache={}}get(t,e,r,n){let s;n=n||[];try{s="string"==typeof t?t:t.constructor.name,n.unshift(...Object.values(this.cache[s][e][r]||[]))}catch(e){if("string"==typeof t||t===Object.prototype||Object.getPrototypeOf(t)===Object.prototype)return n}let a=Object.getPrototypeOf(t);return a.constructor.name===s&&(a=Object.getPrototypeOf(a)),this.get(a,e,r,n)}register(t,e,r,n){const s=r.constructor.name,a=$.getHandlerName(t);this.cache[s]||(this.cache[s]={}),this.cache[s][n]||(this.cache[s][n]={}),this.cache[s][n][e]||(this.cache[s][n][e]={}),this.cache[s][n][e][a]||(this.cache[s][n][e][a]=t)}}class ${constructor(){}static getHandlerName(t){return t.name?t.name:d.hash(t.toString())}static key(t){return k.REFLECT+t}static get(t,e,r){return $.registry.get(t,e,r)}static getOpRegistry(){return $.registry||($.registry=new U),$.registry}static register(t,e,r,n){$.getOpRegistry().register(t,e,r,n)}}class F extends Error{constructor(t,e,r){if(e instanceof F)return e;super(`[${t}] ${e instanceof Error?e.message:e}`),this.code=r,e instanceof Error&&(this.stack=e.stack)}}class H extends F{constructor(t,e=H.name,r=400){super(e,t,r)}}class V extends H{constructor(t){super(t,V.name,422)}}class _ extends F{constructor(t,e=_.name,r=500){super(e,t,r)}}class Y extends _{constructor(t){super(t,Y.name,500)}}class z extends H{constructor(t){super(t,z.name,404)}}class K extends H{constructor(t){super(t,K.name,409)}}const Q={priority:50},G=(t,e,r,n)=>{const s=r.constructor.name;if(!s)throw new _("Could not determine model class");n=n||{},t.props.handlers[s]&&t.props.handlers[s][e]&&(n={...t.props.handlers[s][e],...n});let a=Object.getPrototypeOf(r);return a===Object.prototype?n:(a.constructor.name===s&&(a=Object.getPrototypeOf(a)),G(t,e,a,n))};function q(t,e,r){const n=[];for(const s in e){const a=e[s];for(const e of a){const{key:a}=e,o=$.get(t,s,r+a);if(!o||!o.length)throw new _(`Could not find registered handler for the operation ${r+a} under property ${s}`);const i=G(e,s,t);if(!i||Object.values(i).length!==o.length)throw new _("Args and handlers length do not match");for(let t=0;t<o.length;t++){const e=i[o[t].name].data;n.push({handler:o[t],data:[e],prop:[s]})}}}return n}function B(t){const e=t.reduce((t,e)=>{if(!e||!e.data||!e.prop)throw new _("Missing decorator properties or data");if(!e.data[0].group)return t.set(Symbol(),e),t;const r=e.data[0].group;if(t.has(r)){const n=t.get(r);t.set(r,{handler:n.handler,data:[...n.data,...e.data],prop:[...n.prop,...e.prop]})}else t.set(r,{...e});return t},new Map),r=Array.from(e.values());return r.forEach(t=>{const e=t.data.map((e,r)=>({data:e,prop:t.prop[r]}));e.sort((t,e)=>(t.data.groupPriority??50)-(e.data.groupPriority??50)),t.data=e.map(t=>t.data),t.prop=e.map(t=>t.prop)}),r}function J(t){return t.sort((t,e)=>(t.data[0].priority??50)-(e.data[0].priority??50)),t}function Z(t,e,r){return nt(M.CREATE_UPDATE,t,e,r)}function W(t,e,r){return nt(M.UPDATE,t,e,r)}function X(t,e,r){return nt(M.CREATE,t,e,r)}function tt(t,e,r){return nt(M.READ,t,e,r)}function et(t,e,r){return nt(M.DELETE,t,e,r)}function rt(t,e,r){return nt(M.ALL,t,e,r)}function nt(t=M.ALL,e,r,n){return dt(k.ON,t,e,r,n)}function st(t,e,r){return ut(M.CREATE_UPDATE,t,e,r)}function at(t,e,r){return ut(M.UPDATE,t,e,r)}function ot(t,e,r){return ut(M.CREATE,t,e,r)}function it(t,e,r){return ut(M.READ,t,e,r)}function ct(t,e,r){return ut(M.DELETE,t,e,r)}function lt(t,e,r){return ut(M.ALL,t,e,r)}function ut(t=M.ALL,e,r,n){return dt(k.AFTER,t,e,r,n)}function dt(n,s=M.ALL,a,o,i=Q){return(c,l)=>{const u=c.constructor.name,d=s.reduce((r,s)=>{const d=n+s;let f=t.readOperation(c.constructor,l,d);f||(f={operation:s,handlers:{}});const p=$.getHandlerName(a);let h=i;if(o){if(Object.keys(o).filter(t=>t in i).length>0)throw new _("Unable to merge groupSort into dataToAdd due to overlaping keys");h={...i,...o}}return f.handlers[u]&&f.handlers[u][l]&&p in f.handlers[u][l]||(f.handlers[u]=f.handlers[u]||{},f.handlers[u][l]=f.handlers[u][l]||{},f.handlers[u][l][p]={data:h},r.push(((t,e)=>(r,n)=>{$.register(e,t,r,n)})(d,a),e(t.key(C.OPERATIONS,l,d),f))),r},[]);return r(...d)(c,l)}}function ft(t,e){return(...r)=>n(t,{args:r,handler:e})}const pt=t=>ft(k.REFLECT+k.BLOCK,(t,e)=>t.includes(e))(t);function ht(t=S.READONLY.INVALID){const e=D.READONLY,r={message:t,description:"defines the attribute as readOnly",async:!1};return s.for(e).define({decorator:f,args:[ht,e,r]}).apply()}async function Et(t,e,r,n){n[r]=t.timestamp}function gt(t=M.CREATE_UPDATE,n=b){const a=u.updateKey(D.TIMESTAMP);return s.for(a).define({decorator:(t,n)=>{const s=[h(n,S.TIMESTAMP.DATE),E(S.TIMESTAMP.REQUIRED),e(u.key(D.TIMESTAMP),{operation:t,format:n}),nt(t,Et)];return-1!==t.indexOf(k.UPDATE)?s.push(e(a,{message:S.TIMESTAMP.INVALID})):s.push(ht()),r(...s)},args:[t,n]}).apply()}async function yt(t,e,r,n){if(n[r])try{n[r]=JSON.stringify(n[r])}catch(t){throw new Y(`Failed to serialize ${r.toString()} property of model ${n.constructor.name}: e`)}}async function mt(t,e,r,n){if(n[r]&&"string"==typeof n[r])try{n[r]=JSON.parse(n[r])}catch(t){throw new Y(`Failed to deserialize ${r.toString()} property of model ${n.constructor.name}: ${t}`)}}function At(){return r(Z(yt),ut(M.ALL,mt),p([String,Object]),n(D.SERIALIZE,{}))}function Tt(){return r(E(),ht(),(r,n)=>e(t.key(D.ID,n),{})(r,n))}function wt(e,r){const n=[];for(const s in e){if(!Object.prototype.hasOwnProperty.call(e,s)||r.includes(s))continue;const a=t.validationFor(e.constructor,s)||{};n.push({prop:s,decorators:a})}return n}function Pt(t,e,r,n,s){const a=u.get(n.key);if(!a)throw Error("Missing validator for "+n.key);if(!a.updateHasErrors)return g(void 0,s);if(!s&&n.async)return g(void 0,s);const o=Object.values(n)||{},i=a.updateHasErrors(t[r],e[r],...o);return g(i,s)}function Ot(t,e,r,n,s){const a={};for(const o in n){const i={...n[o],key:o};if(!s&&i.async)continue;let c=Pt(t,e,r,i,s);if(i.key===y.LIST&&(!c||s)){const n=t[r],a=e[r],o=n instanceof Set?[...n]:n,l=a instanceof Set?[...a]:a;if(o?.length){const t=[i.class||i.clazz||i.customTypes].flat().map(t=>((t=(t="function"!=typeof t||t.name?t:t()).name?t.name:t)+"").toLowerCase()),e=o.map(e=>{const r=m.pk(e,!0);if(!r)return"Failed to find model id";const n=l.find(t=>r===m.pk(t,!0));return m.isModel(e)?e.hasErrors(n):t.includes(typeof e)?void 0:"Value has no validatable type"});if(s)c=Promise.all(e).then(t=>t.every(t=>!t)?void 0:t);else{const t=e.every(t=>!t);c=e.length>0&&!t?e:void 0}}}c&&(a[i.key]=c)}if(!s)return Object.keys(a).length>0?a:void 0;const o=Object.keys(a),i=Object.values(a);return Promise.all(i).then(t=>{const e={};for(let r=0;r<t.length;r++){const n=t[r];void 0!==n&&(e[o[r]]=n)}return Object.keys(e).length>0?e:void 0})}function Rt(e,r,n,...s){const o=wt(r,s),i={},c={};for(const{prop:s,decorators:l}of o){const o=s+"",u=r[s],{designTypes:d,designType:f}=t.getPropDesignTypes(r.constructor,s);if(!d)continue;if(d.some(t=>[Array.name,Set.name].includes(t))){if(!l||!Object.keys(l).includes(y.LIST)){i[o]={[y.TYPE]:`Array or Set property '${o}' requires a @list decorator`};continue}if(u&&!(Array.isArray(u)||u instanceof Set)){i[o]={[y.TYPE]:`Property '${s+""}' must be either an Array or a Set`};continue}}const p=Ot(r,e,o,l,n)||{},h=m.isPropertyModel(r,o);if(null!=u&&h){const t=u,r=(Array.isArray(f)?f:[f]).map(t=>("function"!=typeof t||t.name||(t=t()),m.get(t.name||t))).find(t=>!!t);r&&t instanceof r?c[o]=t.hasErrors(e[s]):(p[y.TYPE]=r?"Value must be an instance of "+r.name:`Unable to verify type consistency, missing model registry for ${d.toString()} on prop ${o}`,delete p[a.TYPE])}(Object.keys(p).length>0||n)&&(i[o]=p),n||Object.entries(c[o]||{}).forEach(([t,e])=>{void 0!==e&&(i[`${o}.${t}`]=e)})}if(!n)return Object.keys(i).length>0?new A(i):void 0;const l=i,u=Object.keys(l),d=Object.values(l);return Promise.allSettled(d).then(async t=>{const e={};for(const[t,r]of Object.entries(c)){const n=await r;n&&Object.entries(n).forEach(([r,n])=>{void 0!==n&&(e[[t,r].join(".")]=n)})}for(let r=0;r<t.length;r++){const n=u[r],s=t[r];"fulfilled"===s.status&&void 0!==s.value?e[n]=s.value:"rejected"===s.status&&(e[n]=s.reason instanceof Error?s.reason.message:(s.reason||"Validation failed")+"")}return Object.keys(e).length>0?new A(e):void 0})}function Dt(t,e,r,n,s){if(void 0===n[r])return;const a=d.hash(n[r]);s&&n[r]===a||(n[r]=a)}function xt(){return r(Z(Dt),e(D.HASH,{}))}function bt(t,e,r,n){try{const{args:t,type:s,prefix:a,suffix:o,separator:i}=e,c=t.map(e=>{if(!(e in n))throw new _(`Property ${e} not found to compose from`);if("keys"===s)return e;if(void 0===n[e])throw new _(`Property ${t} does not contain a value to compose from`);return n[e].toString()});a&&c.unshift(a),o&&c.push(o),n[r]=c.join(i)}catch(t){throw new _("Failed to compose value: "+t)}}function St(t,n=!1,s=x,a="values",o="",i="",c={priority:55}){const l={args:t,hashResult:n,separator:s,type:a,prefix:o,suffix:i},u=[Z(bt,l,c),e(D.COMPOSED,l)];return n&&u.push(xt()),r(...u)}function Lt(t,e=x,r=!1,n="",s="",a={priority:55}){return St(t,r,e,"keys",n,s,a)}function vt(t,e=x,r=!1,n="",s="",a={priority:55}){return St(t,r,e,"values",n,s,a)}function It(t){return(e,r,n,s)=>{try{switch(t){case k.CREATE:s[n]=1;break;case k.UPDATE:s[n]++;break;default:throw new _("Invalid operation: "+t)}}catch(t){throw new _("Failed to update version: "+t)}}}function Nt(){const t=D.VERSION;return s.for(t).define(p(Number),X(It(k.CREATE)),W(It(k.UPDATE)),e(t,!0)).apply()}function kt(){return s.for(D.TRANSIENT).define((r,n)=>{e(D.TRANSIENT,!0)(r.constructor),e(t.key(D.TRANSIENT,n),{})(r,n)}).apply()}function Ct(t){return t.reduce((t,e,r)=>(e&&(t="string"==typeof t?t+`\n - ${r}: ${e.toString()}`:` - ${r}: ${e.toString()}`),t),void 0)}async function jt(t,e,r,n,s,a){const o=Mt(r,n,s);if(!o)return;const i=J(B(q(r,o,s)));for(const o of i){const i=[e,o.data.length>1?o.data:o.data[0],o.prop.length>1?o.prop:o.prop[0],r];if(n===k.UPDATE&&s===k.ON){if(!a)throw new _("Missing old model for update operation");i.push(a)}try{await o.handler.apply(t,i)}catch(t){const n=`Failed to execute handler ${o.handler.name} for ${o.prop} on ${r.constructor.name} due to error: ${t}`;if(e.get("breakOnHandlerError"))throw new _(n)}}}function Mt(e,r,n){const s=n?.replace(/[.]$/,""),a=t.get(e.constructor,C.OPERATIONS);if(a)return Object.keys(a).reduce((t,e)=>{const n=s?a[e][s]||{}:a[e],o=Object.keys(n).filter(t=>t===r),i=[];for(const t of o)i.push({key:t,props:n[t]});return i&&i.length&&(t||(t={}),t[e]=i),t},void 0)}m.prototype.isTransient=function(){return t.isTransient(this)},m.prototype.hasErrors=function(t,...e){!t||t instanceof m||(e.unshift(t),t=void 0);const r=this.isAsync(),n=T(this,r,...e);return r?Promise.resolve(n).then(n=>n||!t?n:Rt(t,this,r,...e)):n||!t?n:Rt(t,this,r,...e)},m.prototype.segregate=function(){return m.segregate(this)},m.segregate=e=>{if(!t.isTransient(e))return{model:e};const r=t.validatableProperties(e.constructor),n=t.get(e.constructor,D.TRANSIENT),s={model:{},transient:{}};for(const t of r)if(Object.keys(n).includes(t)){s.transient=s.transient||{};try{s.transient[t]=e[t]}catch(e){throw new Y(`Failed to serialize transient property ${t}: ${e}`)}}else s.model=s.model||{},s.model[t]=e[t];return s.model=m.build(s.model,e.constructor.name),s},m.pk=((e,r=!1)=>{if(!e)throw Error("No model was provided");const n=e instanceof m?e.constructor:e,s=t.get(n,D.ID);if(!s)throw Error("No Id property defined for model "+(n?.name||"Unknown Model"));const a=Object.keys(s)[0];if(!r)return a;if(e instanceof m)return e[a];throw Error("Cannot get the value of the pk from the constructor")}).bind(m),m.pkProps=(e=>t.get(e,t.key(D.ID,m.pk(e)))).bind(m),m.isTransient=(e=>t.isTransient(e)).bind(m),m.merge=((t,e,r)=>{const n=t=>Object.entries(t).reduce((t,[e,r])=>(void 0!==r&&(t[e]=r),t),{});return new(r=r||t.constructor)(Object.assign({},n(t),n(e)))}).bind(m),t.saveOperation=((e,r,n,s)=>{r&&t.set(e,t.key(C.OPERATIONS,r,n),s)}).bind(t),t.readOperation=((e,r,n)=>{if(r&&n)return t.get(e,t.key(C.OPERATIONS,r,n))}).bind(t),t.isTransient=(e=>!!t.get("function"!=typeof e?e.constructor:e,D.TRANSIENT)).bind(t);const Ut={parentContext:void 0,childContexts:[],ignoredValidationProperties:[],callArgs:[],writeOperation:!1,affectedTables:[],operation:void 0,breakOnHandlerError:!0,rebuildWithTransient:!0,ignoreValidation:!1,ignoreHandlers:!0},$t=t=>(new Ft).accumulate(Object.assign({},t,{timestamp:new Date,logger:t.logger||R.get()}));class Ft{constructor(){this.cache=new O,Object.defineProperty(this,"cache",{value:new O,writable:!1,enumerable:!1,configurable:!0})}static{this.factory=$t}accumulate(t){return Object.defineProperty(this,"cache",{value:this.cache.accumulate(t),writable:!1,enumerable:!1,configurable:!0}),this}get logger(){return this.cache.logger}get timestamp(){return this.cache.timestamp}get(t){try{return this.cache.get(t)}catch(e){const r=this.cache.parentContext;if(r)return r.get(t);throw e}}static childFrom(t,e){return Ft.factory(Object.assign({},t.cache,e||{}))}static async from(t,e,r,...n){return Ft.factory(Object.assign({},Ut,e,{operation:t,model:r,logger:e.logger||R.get()}))}static async args(t,e,r,n,s){const a=r.pop();async function o(){return n?n.context(t,s||{},e,...r):Ft.from(t,s||{},e,...r)}let i;return a?a instanceof Ft?(i=a,r.push(a)):(r.push(a),i=await o(),r.push(i)):(i=await o(),r.push(i)),{context:i,args:r}}}function Ht(t,e,r,n){const s=n||e.name;t[s]=new Proxy(t[s],{apply:async(t,e,n)=>{let s=r.call(e,...n);return s instanceof Promise&&(s=await s),s=t.call(e,...s),s instanceof Promise&&(s=await s),s}})}function Vt(t,e,r,n){const s=n||e.name;t[s]=new Proxy(t[s],{apply:async(t,e,n)=>{let s=t.call(e,...n);return s instanceof Promise&&(s=await s),s=r.call(e,...s),s instanceof Promise&&(s=await s),s}})}function _t(t,e,r,n,s){const a=s||r.name;t[a]=new Proxy(t[a],{apply:async(t,r,s)=>{let a=e.call(r,...s);a instanceof Promise&&(a=await a);const o=a[a.length-1];if(!(o instanceof Ft))throw new _("Missing a context");let i=t.call(r,...a);return i instanceof Promise&&(i=await i),i=n.call(r,i,o),i instanceof Promise&&(i=await i),i}})}class Yt{get class(){if(!this._class)throw new _("No class definition found for this repository");return this._class}get pk(){return m.pk(this.class)}get pkProps(){return m.pkProps(this.class)}constructor(t){t&&(this._class=t);const e=this;[this.create,this.read,this.update,this.delete].forEach(t=>{const r=t.name;_t(e,e[r+"Prefix"],t,e[r+"Suffix"])})}async createAll(t,...e){return Promise.all(t.map(t=>this.create(t,...e)))}async createPrefix(t,...e){const r=await Ft.args(k.CREATE,this.class,e);return t=new this.class(t),await jt(this,r.context,t,k.CREATE,k.ON),[t,...r.args]}async createSuffix(t,e){return await jt(this,e,t,k.CREATE,k.AFTER),t}async createAllPrefix(t,...e){const r=await Ft.args(k.CREATE,this.class,e);return await Promise.all(t.map(async t=>(t=new this.class(t),await jt(this,r.context,t,k.CREATE,k.ON),t))),[t,...r.args]}async createAllSuffix(t,e){return await Promise.all(t.map(t=>jt(this,e,t,k.CREATE,k.AFTER))),t}async readAll(t,...e){return await Promise.all(t.map(t=>this.read(t,...e)))}async readSuffix(t,e){return await jt(this,e,t,k.READ,k.AFTER),t}async readPrefix(t,...e){const r=await Ft.args(k.READ,this.class,e),n=new this.class;return n[this.pk]=t,await jt(this,r.context,n,k.READ,k.ON),[t,...r.args]}async readAllPrefix(t,...e){const r=await Ft.args(k.READ,this.class,e);return await Promise.all(t.map(async t=>{const e=new this.class;return e[this.pk]=t,jt(this,r.context,e,k.READ,k.ON)})),[t,...r.args]}async readAllSuffix(t,e){return await Promise.all(t.map(t=>jt(this,e,t,k.READ,k.AFTER))),t}async updateAll(t,...e){return Promise.all(t.map(t=>this.update(t,...e)))}async updateSuffix(t,e){return await jt(this,e,t,k.UPDATE,k.AFTER),t}async updatePrefix(t,...e){const r=await Ft.args(k.UPDATE,this.class,e),n=t[this.pk];if(!n)throw new _("No value for the Id is defined under the property "+this.pk);const s=await this.read(n);return await jt(this,r.context,t,k.UPDATE,k.ON,s),[t,...r.args]}async updateAllPrefix(t,...e){const r=await Ft.args(k.UPDATE,this.class,e);return await Promise.all(t.map(t=>(t=new this.class(t),jt(this,r.context,t,k.UPDATE,k.ON),t))),[t,...r.args]}async updateAllSuffix(t,e){return await Promise.all(t.map(t=>jt(this,e,t,k.UPDATE,k.AFTER))),t}async deleteAll(t,...e){return Promise.all(t.map(t=>this.delete(t,...e)))}async deleteSuffix(t,e){return await jt(this,e,t,k.DELETE,k.AFTER),t}async deletePrefix(t,...e){const r=await Ft.args(k.DELETE,this.class,e),n=await this.read(t,...r.args);return await jt(this,r.context,n,k.DELETE,k.ON),[t,...r.args]}async deleteAllPrefix(t,...e){const r=await Ft.args(k.DELETE,this.class,e),n=await this.readAll(t,...r.args);return await Promise.all(n.map(async t=>jt(this,r.context,t,k.DELETE,k.ON))),[t,...r.args]}async deleteAllSuffix(t,e){return await Promise.all(t.map(t=>jt(this,e,t,k.DELETE,k.AFTER))),t}toString(){return this.class.name+" Repository"}}class zt extends Yt{constructor(t){super(t)}async createPrefix(t,...e){const r=await Ft.args(k.CREATE,this.class,e);if(t=new this.class(t),!1!==r.context.get("ignoreHandlers")&&await jt(this,r.context,t,k.CREATE,k.ON),!r.context.get("ignoreValidation")){const e=await Promise.resolve(t.hasErrors());if(e)throw new V(e.toString())}return[t,...r.args]}async createAllPrefix(t,...e){const r=await Ft.args(k.CREATE,this.class,e),n=!1!==r.context.get("ignoreHandlers"),s=!r.context.get("ignoreValidation");if(t=await Promise.all(t.map(async t=>{const e=new this.class(t);return n&&await jt(this,r.context,e,k.CREATE,k.ON),e})),s){const e=Ct(await Promise.all(t.map(t=>Promise.resolve(t.hasErrors()))));if(e)throw new V(e)}return[t,...r.args]}async updatePrefix(t,...e){const r=await Ft.args(k.UPDATE,this.class,e),n=!1!==r.context.get("ignoreHandlers"),s=!r.context.get("ignoreValidation"),a=t[this.pk];if(!a)throw new _("No value for the Id is defined under the property "+this.pk);const o=await this.read(a);if(t=m.merge(o,t,this.class),n&&await jt(this,r.context,t,k.UPDATE,k.ON,o),s){const e=await Promise.resolve(t.hasErrors(o));if(e)throw new V(e.toString())}return[t,...r.args]}async updateAllPrefix(t,...e){const r=await Ft.args(k.UPDATE,this.class,e),n=!1!==r.context.get("ignoreHandlers"),s=!r.context.get("ignoreValidation"),a=t.map(t=>{const e=t[this.pk];if(void 0===e)throw new _("No value for the Id is defined under the property "+this.pk);return e}),o=await this.readAll(a,...r.args);if(t=t.map((t,e)=>m.merge(o[e],t,this.class)),n&&await Promise.all(t.map((t,e)=>jt(this,r.context,t,k.UPDATE,k.ON,o[e]))),s){const e=Ct(await Promise.all(t.map((t,e)=>Promise.resolve(t.hasErrors(o[e])))));if(e)throw new V(e)}return[t,...r.args]}async readPrefix(t,...e){return super.readPrefix(t,...e)}async readAllPrefix(t,...e){return super.readAllPrefix(t,...e)}async deleteAllPrefix(t,...e){return super.deleteAllPrefix(t,...e)}}const Kt="##VERSION##",Qt="##PACKAGE##";t.registerLibrary(Qt,Kt);export{H as BadRequestError,F as BaseError,Yt as BaseRepository,pt as BlockOperations,j as BulkCrudOperationKeys,K as ConflictError,Ft as Context,D as DBKeys,M as DBOperations,S as DEFAULT_ERROR_MESSAGES,b as DEFAULT_TIMESTAMP_FORMAT,$t as DefaultContextFactory,Ut as DefaultRepositoryFlags,x as DefaultSeparator,_ as InternalError,C as ModelOperations,z as NotFoundError,k as OperationKeys,$ as Operations,U as OperationsRegistry,Qt as PACKAGE_NAME,v as ReadOnlyValidator,zt as Repository,Y as SerializationError,I as TimestampValidator,L as UpdateValidationKeys,N as UpdateValidator,Kt as VERSION,V as ValidationError,ut as after,lt as afterAny,ot as afterCreate,st as afterCreateUpdate,ct as afterDelete,it as afterRead,at as afterUpdate,vt as composed,bt as composedFromCreateUpdate,Lt as composedFromKeys,jt as enforceDBDecorators,Mt as getDbDecorators,G as getHandlerArgs,q as getHandlersDecorators,wt as getValidatableUpdateProps,B as groupDecorators,xt as hash,Dt as hashOnCreateUpdate,Tt as id,nt as on,rt as onAny,X as onCreate,Z as onCreateUpdate,et as onDelete,tt as onRead,W as onUpdate,dt as operation,Ht as prefixMethod,ht as readonly,Ct as reduceErrorsToPrint,At as serialize,mt as serializeAfterAll,yt as serializeOnCreateUpdate,J as sortDecorators,ft as storeHandlerMetadata,Vt as suffixMethod,gt as timestamp,Et as timestampHandler,kt as transient,Rt as validateCompare,Pt as validateDecorator,Ot as validateDecorators,Nt as version,It as versionCreateUpdate,_t as wrapMethodWithContext};
|
|
2
2
|
//# sourceMappingURL=db-decorators.js.map
|