UNPKG

svelte-specma

Version:

Svelte store for data validation using Specma

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