@jaysalvat/smart-model
Advanced tools
Comparing version 0.6.1 to 0.6.2
/**! | ||
* SmartModel | ||
* https://github.com/jaysalvat/smart-model | ||
* @version 0.6.1 built 2021-02-26 08:19:29 | ||
* @version 0.6.2 built 2021-02-26 08:21:37 | ||
* @license ISC | ||
@@ -6,0 +6,0 @@ * @author Jay Salvat http://jaysalvat.com |
@@ -1,2 +0,2 @@ | ||
/*! SmartModel v0.6.1 */ | ||
/*! SmartModel v0.6.2 */ | ||
function e(e){return Array.isArray(e)}function t(e){return void 0===e}function r(e){return"function"==typeof e}function n(e){return e&&e.toString().startsWith("class")}function s(e){return e&&(e.prototype instanceof l||e instanceof l)}function o(e){return e&&"[object Object]"===e.toString()}function c(e,t=function(){}){return Object.keys(e).map((r=>t(r,e[r])))}function i(e){return[].concat([],e)}function u(e,t){return t=Object.assign({},e,t),c(e,(r=>{o(e[r])&&o(t[r])&&(t[r]=Object.assign({},e[r],u(e[r],t[r])))})),t}class p extends Error{constructor(e){super(e.message),Object.assign(this,e)}}function a(t,r,u,p,a){const f=[];return a.strict&&!c(t||{}).length&&f.push({message:`Property "${r}" can't be set in strict mode`,code:"strict"}),t.required&&a.empty(u)?(f.push({message:`Property "${r}" is "required"`,code:"required"}),f):t.readonly&&!p?(f.push({message:`Property "${r}" is "readonly"`,code:"readonly"}),f):(void 0===u||(!t.type||!t.required&&a.empty(u)||s(t.type)&&o(u)||i(t.type).some((t=>function(t,r){const s=r&&r.toString().match(/^\s*function (\w+)/),o=(s?s[1]:"object").toLowerCase();if("date"===o&&t instanceof r)return!0;if("array"===o&&e(t))return!0;if("object"===o){if(n(r)&&t instanceof r)return!0;if(!n(r)&&typeof t===o)return!0}else if(typeof t===o)return!0;return!1}(u,t)))||f.push({message:`Property "${r}" has an invalid type "${typeof u}"`,code:"type"}),t.rule&&c(t.rule,((e,t)=>{t(u)&&f.push({message:`Property "${r}" triggers the "${e}" rule error`,code:"rule:"+e})}))),f)}function f(e={},t,r){if(e.type){const n=!!s(e.type)&&e.type,c=!!o(e.type)&&e.type;if(n||c){const s=n||l.create(t.normalize("NFD").replace(/[\u0300-\u036f]/g,"").match(/[a-z1-9]+/gi).map((e=>e.charAt(0).toUpperCase()+e.substr(1).toLowerCase())).join(""),c,r);return e.type=s,s}}return!1}p.throw=function(e,t,r,n,s){const c=t.split(":")[0];if(s=s&&s.constructor.name,!0===e.exceptions||o(e.exceptions)&&e.exceptions[c])throw new p({message:`[${s}] ${r}`,source:s,property:n,code:t})};class l extends class{constructor(n,o){return new Proxy(this,{set(i,u,l){const y=n[u]||{},$=i[u],h=t($),d=!(h||(g=l,m=$,JSON.stringify(g)===JSON.stringify(m)));var g,m;const b=f(y,u,o);function w(e,r){const s=Reflect.apply(e,i,r||[u,l,$,n]);return t(s)?l:s}var S;l=w(i.$onBeforeSet),d&&(l=w(i.$onBeforeUpdate)),r(y.transform)&&(l=w(y.transform,[l,n])),e(S=y.type)&&1===S.length&&s(S[0])&&!t(l)&&(l=y.type[0].$hydrate(l),y.type=Array);const j=a(y,u,l,h,o);if(j.length){if(!o.exceptions)return!0;p.throw(o,j[0].code,j[0].message,u,i)}return o.strict&&!c(y).length||(b&&!t(l)&&(l=new b(l)),i[u]=l,w(i.$onSet),d&&(w(i.$onUpdate),i.$applySubscribers(u,l))),!0},get(e,o){const i=n[o];let u=e[o];if(["$get"].includes(o))return function(){return function(e){return c(e=Object.assign({},e),(t=>{s(e[t])&&(e[t]=e[t].$get())})),e}(e)};if(!i)return e[o];function p(r,s){const c=Reflect.apply(r,e,s||[o,u,n]);return t(c)?u:c}return u=p(e.$onBeforeGet),r(i)&&(u=p(i,[e,n])),r(i.format)&&(u=p(i.format,[u,n])),u=p(e.$onGet),u},deleteProperty(e,t){const r=e[t];function s(s,o){return Reflect.apply(s,e,o||[t,r,n])}return(n[t]||{}).required&&p.throw(o,"required",`Property "${t}" is "required"`,t,e),!1===s(e.$onBeforeDelete)||(Reflect.deleteProperty(e,t),s(e.$onDelete),s(e.$onUpdate),e.$applySubscribers(t,r)),!0}})}}{constructor(e={},t={},r){super(e,r),this.$post(t)}$patch(e){c(e,(t=>{this[t]=e[t]}))}$post(e){const r=this.$schema();c(r,((r,n)=>{t(e[r])&&(this[r]=t(n.default)?void 0:n.default)})),c(this,((e,n)=>{t(r[e]&&t(n))&&this.$delete(e)})),this.$patch(e)}$put(e){return this.$post(e)}$delete(e){i(e).forEach((e=>{Reflect.deleteProperty(this,e)}))}$subscribe(e){return this.$subscribers().push(e),()=>{this.$subscribers(e)}}}l.settings={empty:e=>""===e||null===e||t(e),strict:!1,exceptions:{readonly:!1,required:!0,rule:!0,strict:!1,type:!0},methods:{$onBeforeGet:()=>{},$onBeforeSet:()=>{},$onBeforeUpdate:()=>{},$onDelete:()=>{},$onGet:()=>{},$onBeforeDelete:()=>{},$onSet:()=>{},$onUpdate:()=>{}}},l.create=function(t,r,n){let s=[];n=u(l.settings,n);const o={[t]:class extends l{constructor(e){super(r,e,n)}$schema(){return r}$subscribers(e){return e&&(s=s.filter((t=>t!==e))),s}$applySubscribers(e,t){c(s,((r,n)=>{Reflect.apply(n,this,[e,t,this])}))}}}[t];return o.$check=function(e={},t){const s={};return c(r,((r,o)=>{let c;const u=e[r],p=f(o,r,n);p&&(c=p.$check(u,t));let l=a(o,r,u,!1,n);c?s[r]=c:l.length&&(t&&(l=l.filter((e=>!i(t).includes(e.code)))),l.length&&(s[r]=l))})),!!c(s).length&&s},o.$hydrate=function(t){return e(t)?t.map((e=>new o(e))):new o(t)},Object.assign(o.prototype,n.methods),o};export default l; |
/**! | ||
* SmartModel | ||
* https://github.com/jaysalvat/smart-model | ||
* @version 0.6.1 built 2021-02-26 08:19:29 | ||
* @version 0.6.2 built 2021-02-26 08:21:37 | ||
* @license ISC | ||
@@ -6,0 +6,0 @@ * @author Jay Salvat http://jaysalvat.com |
@@ -1,2 +0,2 @@ | ||
/*! SmartModel v0.6.1 */ | ||
/*! SmartModel v0.6.2 */ | ||
var SmartModel=function(){"use strict";function e(e){return Array.isArray(e)}function t(e){return void 0===e}function r(e){return"function"==typeof e}function n(e){return e&&e.toString().startsWith("class")}function s(e){return e&&(e.prototype instanceof l||e instanceof l)}function o(e){return e&&"[object Object]"===e.toString()}function c(e,t=function(){}){return Object.keys(e).map((r=>t(r,e[r])))}function i(e){return[].concat([],e)}function u(e,t){return t=Object.assign({},e,t),c(e,(r=>{o(e[r])&&o(t[r])&&(t[r]=Object.assign({},e[r],u(e[r],t[r])))})),t}class p extends Error{constructor(e){super(e.message),Object.assign(this,e)}}function a(t,r,u,p,a){const f=[];return a.strict&&!c(t||{}).length&&f.push({message:`Property "${r}" can't be set in strict mode`,code:"strict"}),t.required&&a.empty(u)?(f.push({message:`Property "${r}" is "required"`,code:"required"}),f):t.readonly&&!p?(f.push({message:`Property "${r}" is "readonly"`,code:"readonly"}),f):(void 0===u||(!t.type||!t.required&&a.empty(u)||s(t.type)&&o(u)||i(t.type).some((t=>function(t,r){const s=r&&r.toString().match(/^\s*function (\w+)/),o=(s?s[1]:"object").toLowerCase();if("date"===o&&t instanceof r)return!0;if("array"===o&&e(t))return!0;if("object"===o){if(n(r)&&t instanceof r)return!0;if(!n(r)&&typeof t===o)return!0}else if(typeof t===o)return!0;return!1}(u,t)))||f.push({message:`Property "${r}" has an invalid type "${typeof u}"`,code:"type"}),t.rule&&c(t.rule,((e,t)=>{t(u)&&f.push({message:`Property "${r}" triggers the "${e}" rule error`,code:"rule:"+e})}))),f)}function f(e={},t,r){if(e.type){const n=!!s(e.type)&&e.type,c=!!o(e.type)&&e.type;if(n||c){const s=n||l.create(t.normalize("NFD").replace(/[\u0300-\u036f]/g,"").match(/[a-z1-9]+/gi).map((e=>e.charAt(0).toUpperCase()+e.substr(1).toLowerCase())).join(""),c,r);return e.type=s,s}}return!1}p.throw=function(e,t,r,n,s){const c=t.split(":")[0];if(s=s&&s.constructor.name,!0===e.exceptions||o(e.exceptions)&&e.exceptions[c])throw new p({message:`[${s}] ${r}`,source:s,property:n,code:t})};class l extends class{constructor(n,o){return new Proxy(this,{set(i,u,l){const y=n[u]||{},$=i[u],h=t($),d=!(h||(g=l,m=$,JSON.stringify(g)===JSON.stringify(m)));var g,m;const b=f(y,u,o);function S(e,r){const s=Reflect.apply(e,i,r||[u,l,$,n]);return t(s)?l:s}var w;l=S(i.$onBeforeSet),d&&(l=S(i.$onBeforeUpdate)),r(y.transform)&&(l=S(y.transform,[l,n])),e(w=y.type)&&1===w.length&&s(w[0])&&!t(l)&&(l=y.type[0].$hydrate(l),y.type=Array);const j=a(y,u,l,h,o);if(j.length){if(!o.exceptions)return!0;p.throw(o,j[0].code,j[0].message,u,i)}return o.strict&&!c(y).length||(b&&!t(l)&&(l=new b(l)),i[u]=l,S(i.$onSet),d&&(S(i.$onUpdate),i.$applySubscribers(u,l))),!0},get(e,o){const i=n[o];let u=e[o];if(["$get"].includes(o))return function(){return function(e){return c(e=Object.assign({},e),(t=>{s(e[t])&&(e[t]=e[t].$get())})),e}(e)};if(!i)return e[o];function p(r,s){const c=Reflect.apply(r,e,s||[o,u,n]);return t(c)?u:c}return u=p(e.$onBeforeGet),r(i)&&(u=p(i,[e,n])),r(i.format)&&(u=p(i.format,[u,n])),u=p(e.$onGet),u},deleteProperty(e,t){const r=e[t];function s(s,o){return Reflect.apply(s,e,o||[t,r,n])}return(n[t]||{}).required&&p.throw(o,"required",`Property "${t}" is "required"`,t,e),!1===s(e.$onBeforeDelete)||(Reflect.deleteProperty(e,t),s(e.$onDelete),s(e.$onUpdate),e.$applySubscribers(t,r)),!0}})}}{constructor(e={},t={},r){super(e,r),this.$post(t)}$patch(e){c(e,(t=>{this[t]=e[t]}))}$post(e){const r=this.$schema();c(r,((r,n)=>{t(e[r])&&(this[r]=t(n.default)?void 0:n.default)})),c(this,((e,n)=>{t(r[e]&&t(n))&&this.$delete(e)})),this.$patch(e)}$put(e){return this.$post(e)}$delete(e){i(e).forEach((e=>{Reflect.deleteProperty(this,e)}))}$subscribe(e){return this.$subscribers().push(e),()=>{this.$subscribers(e)}}}return l.settings={empty:e=>""===e||null===e||t(e),strict:!1,exceptions:{readonly:!1,required:!0,rule:!0,strict:!1,type:!0},methods:{$onBeforeGet:()=>{},$onBeforeSet:()=>{},$onBeforeUpdate:()=>{},$onDelete:()=>{},$onGet:()=>{},$onBeforeDelete:()=>{},$onSet:()=>{},$onUpdate:()=>{}}},l.create=function(t,r,n){let s=[];n=u(l.settings,n);const o={[t]:class extends l{constructor(e){super(r,e,n)}$schema(){return r}$subscribers(e){return e&&(s=s.filter((t=>t!==e))),s}$applySubscribers(e,t){c(s,((r,n)=>{Reflect.apply(n,this,[e,t,this])}))}}}[t];return o.$check=function(e={},t){const s={};return c(r,((r,o)=>{let c;const u=e[r],p=f(o,r,n);p&&(c=p.$check(u,t));let l=a(o,r,u,!1,n);c?s[r]=c:l.length&&(t&&(l=l.filter((e=>!i(t).includes(e.code)))),l.length&&(s[r]=l))})),!!c(s).length&&s},o.$hydrate=function(t){return e(t)?t.map((e=>new o(e))):new o(t)},Object.assign(o.prototype,n.methods),o},l}(); |
/**! | ||
* SmartModel | ||
* https://github.com/jaysalvat/smart-model | ||
* @version 0.6.1 built 2021-02-26 08:19:29 | ||
* @version 0.6.2 built 2021-02-26 08:21:37 | ||
* @license ISC | ||
@@ -6,0 +6,0 @@ * @author Jay Salvat http://jaysalvat.com |
@@ -1,2 +0,2 @@ | ||
/*! SmartModel v0.6.1 */ | ||
/*! SmartModel v0.6.2 */ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).SmartModel=t()}(this,(function(){"use strict";function e(e){return Array.isArray(e)}function t(e){return void 0===e}function r(e){return"function"==typeof e}function n(e){return e&&e.toString().startsWith("class")}function o(e){return e&&(e.prototype instanceof l||e instanceof l)}function s(e){return e&&"[object Object]"===e.toString()}function i(e,t=function(){}){return Object.keys(e).map((r=>t(r,e[r])))}function c(e){return[].concat([],e)}function u(e,t){return t=Object.assign({},e,t),i(e,(r=>{s(e[r])&&s(t[r])&&(t[r]=Object.assign({},e[r],u(e[r],t[r])))})),t}class p extends Error{constructor(e){super(e.message),Object.assign(this,e)}}function a(t,r,u,p,a){const f=[];return a.strict&&!i(t||{}).length&&f.push({message:`Property "${r}" can't be set in strict mode`,code:"strict"}),t.required&&a.empty(u)?(f.push({message:`Property "${r}" is "required"`,code:"required"}),f):t.readonly&&!p?(f.push({message:`Property "${r}" is "readonly"`,code:"readonly"}),f):(void 0===u||(!t.type||!t.required&&a.empty(u)||o(t.type)&&s(u)||c(t.type).some((t=>function(t,r){const o=r&&r.toString().match(/^\s*function (\w+)/),s=(o?o[1]:"object").toLowerCase();if("date"===s&&t instanceof r)return!0;if("array"===s&&e(t))return!0;if("object"===s){if(n(r)&&t instanceof r)return!0;if(!n(r)&&typeof t===s)return!0}else if(typeof t===s)return!0;return!1}(u,t)))||f.push({message:`Property "${r}" has an invalid type "${typeof u}"`,code:"type"}),t.rule&&i(t.rule,((e,t)=>{t(u)&&f.push({message:`Property "${r}" triggers the "${e}" rule error`,code:"rule:"+e})}))),f)}function f(e={},t,r){if(e.type){const n=!!o(e.type)&&e.type,i=!!s(e.type)&&e.type;if(n||i){const o=n||l.create(t.normalize("NFD").replace(/[\u0300-\u036f]/g,"").match(/[a-z1-9]+/gi).map((e=>e.charAt(0).toUpperCase()+e.substr(1).toLowerCase())).join(""),i,r);return e.type=o,o}}return!1}p.throw=function(e,t,r,n,o){const i=t.split(":")[0];if(o=o&&o.constructor.name,!0===e.exceptions||s(e.exceptions)&&e.exceptions[i])throw new p({message:`[${o}] ${r}`,source:o,property:n,code:t})};class l extends class{constructor(n,s){return new Proxy(this,{set(c,u,l){const y=n[u]||{},d=c[u],h=t(d),$=!(h||(g=l,m=d,JSON.stringify(g)===JSON.stringify(m)));var g,m;const b=f(y,u,s);function S(e,r){const o=Reflect.apply(e,c,r||[u,l,d,n]);return t(o)?l:o}var j;l=S(c.$onBeforeSet),$&&(l=S(c.$onBeforeUpdate)),r(y.transform)&&(l=S(y.transform,[l,n])),e(j=y.type)&&1===j.length&&o(j[0])&&!t(l)&&(l=y.type[0].$hydrate(l),y.type=Array);const w=a(y,u,l,h,s);if(w.length){if(!s.exceptions)return!0;p.throw(s,w[0].code,w[0].message,u,c)}return s.strict&&!i(y).length||(b&&!t(l)&&(l=new b(l)),c[u]=l,S(c.$onSet),$&&(S(c.$onUpdate),c.$applySubscribers(u,l))),!0},get(e,s){const c=n[s];let u=e[s];if(["$get"].includes(s))return function(){return function(e){return i(e=Object.assign({},e),(t=>{o(e[t])&&(e[t]=e[t].$get())})),e}(e)};if(!c)return e[s];function p(r,o){const i=Reflect.apply(r,e,o||[s,u,n]);return t(i)?u:i}return u=p(e.$onBeforeGet),r(c)&&(u=p(c,[e,n])),r(c.format)&&(u=p(c.format,[u,n])),u=p(e.$onGet),u},deleteProperty(e,t){const r=e[t];function o(o,s){return Reflect.apply(o,e,s||[t,r,n])}return(n[t]||{}).required&&p.throw(s,"required",`Property "${t}" is "required"`,t,e),!1===o(e.$onBeforeDelete)||(Reflect.deleteProperty(e,t),o(e.$onDelete),o(e.$onUpdate),e.$applySubscribers(t,r)),!0}})}}{constructor(e={},t={},r){super(e,r),this.$post(t)}$patch(e){i(e,(t=>{this[t]=e[t]}))}$post(e){const r=this.$schema();i(r,((r,n)=>{t(e[r])&&(this[r]=t(n.default)?void 0:n.default)})),i(this,((e,n)=>{t(r[e]&&t(n))&&this.$delete(e)})),this.$patch(e)}$put(e){return this.$post(e)}$delete(e){c(e).forEach((e=>{Reflect.deleteProperty(this,e)}))}$subscribe(e){return this.$subscribers().push(e),()=>{this.$subscribers(e)}}}return l.settings={empty:e=>""===e||null===e||t(e),strict:!1,exceptions:{readonly:!1,required:!0,rule:!0,strict:!1,type:!0},methods:{$onBeforeGet:()=>{},$onBeforeSet:()=>{},$onBeforeUpdate:()=>{},$onDelete:()=>{},$onGet:()=>{},$onBeforeDelete:()=>{},$onSet:()=>{},$onUpdate:()=>{}}},l.create=function(t,r,n){let o=[];n=u(l.settings,n);const s={[t]:class extends l{constructor(e){super(r,e,n)}$schema(){return r}$subscribers(e){return e&&(o=o.filter((t=>t!==e))),o}$applySubscribers(e,t){i(o,((r,n)=>{Reflect.apply(n,this,[e,t,this])}))}}}[t];return s.$check=function(e={},t){const o={};return i(r,((r,s)=>{let i;const u=e[r],p=f(s,r,n);p&&(i=p.$check(u,t));let l=a(s,r,u,!1,n);i?o[r]=i:l.length&&(t&&(l=l.filter((e=>!c(t).includes(e.code)))),l.length&&(o[r]=l))})),!!i(o).length&&o},s.$hydrate=function(t){return e(t)?t.map((e=>new s(e))):new s(t)},Object.assign(s.prototype,n.methods),s},l})); |
{ | ||
"name": "@jaysalvat/smart-model", | ||
"version": "0.6.1", | ||
"version": "0.6.2", | ||
"description": "SmartModel is a fun experiment over Javascript Proxy. It tends to bring useful tools and best practices to data objects.", | ||
@@ -5,0 +5,0 @@ "main": "./build/smart-model.cjs.min.cjs", |
@@ -66,4 +66,2 @@ ``` | ||
Better documentation soon... | ||
```javascript | ||
@@ -70,0 +68,0 @@ function readingTime(text) { /*...*/ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
128339
590