UNPKG

svelte-specma

Version:

Svelte store for data validation using Specma

3 lines (2 loc) 12 kB
var r=require("svelte/store");function e(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var n=/*#__PURE__*/e(require("fast-deep-equal"));function t(){return t=Object.assign?Object.assign.bind():function(r){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var t in n)({}).hasOwnProperty.call(n,t)&&(r[t]=n[t])}return r},t.apply(null,arguments)}var i=function(r){return r},u=function(){};function o(e,n,t){void 0===e&&(e=[]),void 0===n&&(n=i);var o=e,c=r.writable(e),a=n.length<2,s=r.readable(t,function(r){var e=!1,t=u,i=0,s=new Map,f=new Map;function l(){if(!i){t();var e=o.reduce(function(r,e){return f.has(e)?[].concat(r,[f.get(e)]):r},[]),c=n(e,r);a?r(c):t="function"==typeof c?c:u}}var v=c.subscribe(function(r){(function(r){var e;void 0===r&&(r=[]),void 0===(e=r)&&(e=[]),s.forEach(function(r,n){!e.includes(n)&&r&&r()}),s=new Map(r.map(function(r){return[r,s.get(r)]}))})(r),function(r){void 0===r&&(r=[]),f=new Map(r.map(function(r){return[r,f.get(r)]}))}(r),o=[],r.forEach(function(r,n){o[n]=r,s.get(r)||s.set(r,r.subscribe(function(t){f.set(r,t),i&=~(1<<n),e&&l()},function(){i|=1<<n}))}),e&&l()});return e=!0,l(),function(){v(),s.forEach(function(r){return r&&r()}),t()}});return{exclude:function(){var r=arguments;c.update(function(e){return e.filter(function(e){return![].slice.call(r).includes(e)})})},include:function(){var r=arguments;c.update(function(e){return[].concat(e,[].slice.call(r))})},set:c.set,stores:c,subscribe:s.subscribe,update:c.update}}var c=function(r){return r},a=function(r){return["array","map","object"].includes(s(r))},s=function(r){return{}.toString.call(r).split(" ")[1].slice(0,-1).toLowerCase()};function f(r){var e={array:function(){return r.map(function(r,e){return[e,r]})},map:function(){return Array.from(r.entries())},object:function(){return Object.entries(r)}}[s(r)];return e?e(r):[]}function l(r,e){var n={array:function(){return r.map(function(r){return r[1]})},map:function(){return new Map(r)},object:function(){return Object.fromEntries(r)}}[e];return n?n():l(r,"map")}function v(r){var e={array:function(){return[].concat(r)},map:function(){return Array.from(r.values())},object:function(){return Object.values(r)}}[s(r)];return e?e(r):[]}function d(r){var e={array:function(){return r.map(function(r,e){return e})},map:function(){return Array.from(r.keys())},object:function(){return Object.keys(r)}}[s(r)];return e?e(r):[]}function p(){var r=[].slice.call(arguments).filter(a),e=s(r[0]);if(!r.every(function(r){return s(r)===e})){var n=r.map(s).join(", ");throw new TypeError("Collections must be of same type. Received '"+n+"'.")}var t={array:function(){return r.reduce(function(r,e){return e.length>=r.length?e:[].concat(e,r.slice(e.length))},[])},map:function(){return new Map(r.map(function(r){return r.entries()}))},object:function(){return Object.assign.apply(Object,[{}].concat(r))}}[e];if(!t)throw new Error("'merge' not implemented yet for "+e);return t()}function b(r,e){var n={array:function(){return e[r]},map:function(){return e.get(r)},object:function(){return e[r]}}[s(e)];return n?n(r,e):void 0}function h(r,e){return void 0===r&&(r=[]),r.reduce(function(r,e){return b(e,r)},e)}function m(r,e,t){void 0===t&&(t=g);var i=[r,e].map(t),u=i[0],o=i[1];return u===o||n.default(u,o)}function g(r){return r instanceof Date?r.valueOf():a(r)?y(r):r}function y(r){return a(r)?l(f(r).reduce(function(r,e){var n=e[1];return void 0===n?r:[].concat(r,[[e[0],y(n)]])},[]),s(r)):r}function w(r){var e=f(r);return{coll:r,collType:s(r),storesEntries:e,keys:e.map(function(r){return r[0]}),stores:e.map(function(r){return r[1]})}}function P(r,e,n){void 0===e&&(e=c);var t=w(r),i=function(r){return l(r.map(function(r,e){return[t.keys[e],r]}),t.collType)},u=o(t.stores,e.length<2?function(r){return e(i(r))}:function(r,n){return e(i(r),n)},n);return{set:function(r){t=w(r),u.set(t.stores)},subscribe:u.subscribe}}var j={valid:!0},E=["and","getMessage","getPred","getSpread","isOpt","validatePred"],O="SvelteSpecma must be configured with a valid Specma version.",S=void 0;function q(){if(!S)throw new TypeError(O)}var M=function(){return!0},A=function(r,e){return!m(r,e)},V=function(r){return!function(r){return[void 0,null,""].includes(r)}(r)||S.getMessage("isRequired")};function x(e,i,u){var o=function(r){void 0===r&&(r=!0);try{return k.set(r),Promise.resolve(Promise.resolve()).then(function(){return Promise.resolve(p).then(function(r){return r.valid})})}catch(r){return Promise.reject(r)}},c=void 0===i?{}:i,a=c.changePred,s=void 0===a?A:a,f=c.id,l=c.required,v=c.spec,d=c.onSubmit;void 0===u&&(u={}),q();var p,b=S.and,g=S.validatePred,y=u.getAncestor,w=(0,S.getPred)(v)||M,E=!!l,O=E?b(V,w):w,x={},T=P(x),L=e,k=r.writable(!1),R=r.writable(!1),N=function(e){var t=e,i=r.writable.apply(void 0,[e].concat([].slice.call(arguments,1)));return{set:function(r){n.default(r,t)||i.set(t=r)},subscribe:i.subscribe}}(L),_=r.derived([k,N,T,R],function(e,n){var i=e[0],u=e[1],o=e[2],c=e[3];p=void 0;var a=C(i&&(void 0!==u||l)?g(O,u,function(e){return x[e]?o[e]:function(e){if(!x[e]){var n,t=y((void 0===(n=e)&&(n=""),(n.match(/\.\.\/|\.\.$/g)||[]).length));if(t){var i=function(r){return void 0===r&&(r=""),r.split("/").reduce(function(r,e){if(!e||e.startsWith("."))return r;var n=parseInt(e,10);return[].concat(r,[isNaN(n)?e:n])},[])}(e);return x[e]=r.derived(t,function(r,n){var t=r.value;if(t){var u=x[e].value,o=h(i,t);m(u,o)||(x[e].value=o,n(o))}}),T.set(x),h(i,r.get(t).value)}}}(e)}):j),v={active:i,changePred:s,initialValue:L,id:f,result:a,submitting:c,value:u};p=a.promise,n(I(v)),null===a.valid&&a.promise.then(function(r){a.promise===p&&n(I(t({},v,{result:r})))})}),D={id:f,isRequired:E,spec:w,activate:o,reset:function(r){void 0===r&&(r=L),L=r,this.activate(!1),this.set(r)},set:function(r,e){void 0===e&&(e=!1),N.set(r),e&&o()},submit:function(){try{return d?(R.set(!0),Promise.resolve(function(e,n){try{var t=Promise.resolve(o()).then(function(e){if(!e)return!1;var n=r.get(N);return Promise.resolve(d(n,D)).then(function(){return!0})})}catch(r){return n(!0,r)}return t&&t.then?t.then(n.bind(null,!1),n.bind(null,!0)):n(!1,t)}(0,function(r,e){if(R.set(!1),r)throw e;return e}))):Promise.resolve()}catch(r){return Promise.reject(r)}},subscribe:_.subscribe};return D}function C(r){return t({},r,{promise:r.promise?r.promise.then(function(r){return C(r)}):Promise.resolve(r)})}function I(r){var e=r.active,n=r.id,t=r.initialValue,i=r.result,u=r.submitting,o=r.value,c=(0,r.changePred)(o,t);return{active:e,changed:c,error:!1===i.valid&&i.reason,id:n,initialValue:t,promise:i.promise||Promise.resolve(i),submitting:u,valid:!!i.valid,validating:null===i.valid,value:c?o:t}}function T(e,n,i){var u=this,c=void 0===n?{}:n,h=c.changePred,m=c.fields,g=c.getId,y=c.id,w=c.required,j=c.spec,E=c.onSubmit;void 0===i&&(i={}),q();var O=S.getPred,M=S.getSpread,A=S.isOpt,V=e,C=void 0===V,I=i.getAncestor,T=[m,j,e].find(a),k=s(T),N=w&&!A(w),_=M(g),D=M(j),F=M(m),W=M(w),$=D||F||W||_||"array"===k,z=$?d(e):[],B=new Set(m?[].concat(d(m),z):[].concat(d(j),d(w),z)),G=O(g),H=x(e,{changePred:O(h),id:y,required:N,spec:j},i),J=function(r,e){var n,u=b(r,h)||M(h),o=e,c=b(r,j)||D,a=b(r,g)||_,s=(n=r,G?G(o,n):"array"===k?(1e9*Math.random()).toFixed(0):n),f=b(r,m)||F,l=b(r,w)||W;return[r,t({},i.specable(o,{spec:c,changePred:u,id:s,getId:a,fields:f,required:l},{getAncestor:function(r){return r<=1||!I?H:I(r-1)}}),{id:s})]},K=l(Array.from(B).map(function(r){return J(r,b(r,e))}),k),Q=r.writable(K),U=r.writable(!1),X=P(K,function(r){if(!C){var e=l(f(r).map(function(r){return[r[0],r[1].value]}),k),n=$?e:p(V,e);return C=void 0===n,n}}),Y=function(){return[U,H].concat(v(K))},Z=o(Y(),function(r){var e=r[0],n=r[1],i=r.slice(2),u=C?n:[n].concat(i).reduce(L);!1!==u.active&&H.activate();var o=n.value,c=n.error,a=Object.fromEntries([["_",n]].concat(C?[]:i.map(function(r){return[r.id,r]}))),s=R(a,y),f=s.filter(function(r){return r.isColl});return t({},u,{id:y,initialValue:n.initialValue,value:o,error:c,errors:s,collErrors:f,details:a,submitting:e})});function rr(r){K=r,Q.set(r),X.set(r),Z.set(Y())}function er(r){if(r){var e=d(r).map(function(e){return J(e,b(e,r))});rr(l([].concat(f(K),e),k))}}function nr(r){void 0===r&&(r=[]),r.length<1||rr(l(f(K).filter(function(e){return!r.includes(e[1].id)}),k))}function tr(r,e){var n=void 0===e?{}:e,t=n.partial,i=void 0!==t&&t,u=n.reset,o=void 0!==u&&u,c=o?"reset":"set";V=o||!i||$?r:p(V,r),C=void 0===V,H[c](V);var a=f(K);if(a.forEach(function(e){var n=e[1],t=b(e[0],r);i&&void 0===t||n[c](t,i)}),$){var s=d(K),v=f(r).filter(function(r){return!s.includes(r[0])});if(v.length>0&&er(l(v,k)),!i){var h=d(r);nr(a.reduce(function(r,e){var n=e[1];return h.includes(e[0])?r:[].concat(r,[n.id])},[]))}}}function ir(r){void 0===r&&(r=!0);var e=[H].concat(C?[]:v(K)).map(function(e){return e.activate(r).then(function(r){if(r)return r;throw r})});return Promise.all(e).then(function(){return!0}).catch(function(){return!1})}var ur={id:y,isRequired:N,spec:j,stores:K,activate:ir,add:function(r){return void 0!==r&&(C=!1),er(r),this},getChild:function(r){void 0===r&&(r=[]);var e=r.reduce(function(r,e){var n=r.children;if(!n)return{res:null};var t=b(e,n);return t?{res:t,children:t.getChildren?t.getChildren():[]}:{res:null}},{children:K});return e.res},getChildren:function(){return K},remove:function(r){return void 0===r&&(r=[]),nr(r),this},reset:function(r){return void 0===r&&(r=e),tr(r,{reset:!0}),ir(!1),this},set:function(r,e,n){return void 0===e&&(e=!1),void 0===n&&(n=!1),tr(r,{partial:e}),n&&ir(),this},update:function(r){return rr(r(K)),u},children:{subscribe:Q.subscribe},submit:function(){try{return E?(U.set(!0),Promise.resolve(function(e,n){try{var t=Promise.resolve(ir()).then(function(e){if(!e)return!1;var n=r.get(H).value;return Promise.resolve(E(n,ur)).then(function(){return!0})})}catch(r){return n(!0,r)}return t&&t.then?t.then(n.bind(null,!1),n.bind(null,!0)):n(!1,t)}(0,function(r,e){if(U.set(!1),r)throw e;return e}))):Promise.resolve()}catch(r){return Promise.reject(r)}},subscribe:function(r){var e=X.subscribe(function(r){return H.set(r)}),n=Z.subscribe(r);return function(){e(),n()}}};return ur}function L(r,e){var n=r.validating||e.validating;return{active:r.active===e.active?e.active:null,changed:r.changed||e.changed,valid:n?null:r.valid&&e.valid,validating:n}}var k=function(r){return function(e){var n=e.path,i=e.error,u=function(r,e){if(null==r)return{};var n={};for(var t in r)if({}.hasOwnProperty.call(r,t)){if(-1!==e.indexOf(t))continue;n[t]=r[t]}return n}(e,["path","error"]),o=void 0===r?n:[r].concat(n);return t({},u,{path:o,which:o.join("."),error:i})}};function R(r,e){return Object.entries(r).flatMap(function(e){var n,t,i,u=e[1];return u.details?R(u.details,r.id).map(k(u.id)):u.error?"_"===e[0]?[{path:[],error:u.error,isColl:!0}]:[(n=u,t=n.id,i=n.error,{path:[t],which:t,error:i})]:[]}).map(k(e))}function N(r){return null!=r?r:""}function _(r){if(!r)return{};if(!Array.isArray(r))return{store:r,toInput:N,toValue:c};var e=r[1],n=(e=void 0===e?{}:e).toInput,t=e.toValue;return{store:r[0],toInput:void 0===n?N:n,toValue:void 0===t?c:t}}exports.collSpecable=T,exports.configure=function(r){if(!r)throw new TypeError(O);E.forEach(function(e){if("function"!=typeof r[e])throw new TypeError("'"+e+"' must be a function provided by 'specma'")}),S=r},exports.predSpecable=x,exports.register=function(r,e){var n,t=_(e);if(r&&t.store)return o(),{destroy:c,update:function(r){c(),r&&(t=_(r),o())}};function i(){t.store.activate()}function u(r){t.store.set(t.toValue(r.target.value))}function o(){var e=!1;n=t.store.subscribe(function(n){var i=n.value,u=r.value,o=e?t.toInput(i,u):t.toInput(i);e=!0,u!==o&&(r.value=o)}),r.addEventListener("blur",i),r.addEventListener("input",u)}function c(){n(),r.removeEventListener("blur",i),r.removeEventListener("input",u)}},exports.specable=function r(e,n,i){return void 0===n&&(n={}),(u=e)&&u.subscribe&&function(r){return"function"==typeof r}(u.subscribe)?e:a(n.fields||n.spec||e)?T(e,n,t({},i,{specable:r})):x(e,n,i);var u}; //# sourceMappingURL=svelte-specma.js.map