UNPKG

tinybase

Version:

A reactive data store and sync engine.

2 lines (1 loc) 1.43 kB
const t=t=>typeof t,e=t(""),r=t(!0),n=t(0),o="type",s="default",u="value",c="optional",i="required",l="unit",a=t=>(e,r,n)=>t(e)?n?.():r(e),f=t=>null==t,y=t=>void 0===t,p=t=>null===t,d=a(f),v=a(y),h=t=>Array.isArray(t),m=t=>t.length,j=(t,e)=>t.forEach(e),k=Object,b=t=>k.getPrototypeOf(t),g=k.entries,A=k.keys,E=k.freeze,O=(t=[])=>k.fromEntries(t),S=(t,e)=>j(g(t),([t,r])=>e(r,t)),q=t=>(t=>!f(t)&&d(b(t),t=>t==k.prototype||f(b(t)),()=>!0))(t)&&0==(t=>m(A(t)))(t),w=(t,e,n)=>{if(h(t)){const c=(u=t=>!p(t?.[l])&&!p(t),!t.every(u));if(2===m(t)&&(s=t[0]?.[l],!1===s)&&(t=>!0===t)(t[1]?.[l]))return[{[o]:r},e,n??!1];if(c){const r=t.find(t=>!p(t?.[l])&&!p(t)&&"="!==t);if(r)return w(r,e,!0)}}var s,u;return[{[o]:t?.domain||t},e,n??!1]},x=t=>{const e=O(),r=t?.json??t;return r?.[i]&&j(r[i],t=>{e[t.key]=t[u]}),r?.[c]&&j(r[c],t=>{const r=t[u],n=t[s];e[t.key]=y(n)?r:{[u]:r,[s]:n}}),q(e)?void 0:e},z=(t,e,r)=>{if(h(t)&&3===m(t)&&"="===t[1]){const e=t[0]?.json??t[0];return w(e,t[2],r)}return t?.[u]&&!y(t?.[s])?w(t[u],t[s],r):w(t,e,r)},N=()=>((t,u)=>{const c=u=>{const[c,i,l]=t(u),a=c?.type;if(a!==e&&a!==n&&a!==r)return;const f={[o]:a};return v(i,t=>{f[s]=t}),l&&(f.allowNull=!0),f};return E({toTablesSchema:t=>{const e=O();return S(t,(t,r)=>{const n=O();v(u(t),t=>S(t,(t,e)=>v(c(t),t=>{n[e]=t}))),q(n)||(e[r]=n)}),e},toValuesSchema:t=>{const e=O();return S(t,(t,r)=>v(c(t),t=>{e[r]=t})),e}})})(z,x);export{N as createArkTypeSchematizer};