dt-shape
Version:
Build data by using shapes
2 lines (1 loc) • 1.26 kB
JavaScript
import t from"dt-toolbox";function o(t,o){const e=Object.entries(o),l=o instanceof Array;return t.query((o=>{const n=["root"],r={};l?o.set("root",[]):o.set("root",{}),e.forEach((([e,l])=>{let n,[s,u]=function(t){let o=null,e=null;return t.includes("!")?[e,o]=t.split("!"):o=t,[o.split("/"),e]}(e);"list"===u&&(n=[]),"fold"===u&&(n={}),"load"===u&&(n=function(t){let o;return t.forEach((t=>{let e=typeof t;"function"===e&&(e=typeof(t=t())),o=null!=e?t:null})),o}(l)),"load"!==u&&l.forEach((e=>{let l=null,r=null!=t.index(`root/${e}`);if(r)o.get(`root/${e}`).look((({key:t,value:o,flatData:e})=>{if("list"===u)n.push(o);else{if("fold"!==u)return n=e,"next";n[t]=o}}));else{const s=e.split("/"),c=s.pop();s.length>0&&(l=`root/${s.join("/")}`,r=null!=t.index(l)),o.look((({key:t,value:o,breadcrumbs:e})=>{if(r&&e!=l)return"next";t===c&&("list"===u?n.push(o):"fold"===u?n[t]=o:n=o)}))}})),"object"==typeof n&&0===Object.entries(n).length||null!=n&&(r[s.join("/")]=n)}));Object.entries(r).forEach((([t,e])=>{const l=t.split("/"),r=l.pop();let s="root";l.forEach((t=>{n.includes(t)||(o.set(t,{}),o.connect([`${s}/${t}`]),n.push(t)),s=t})),null!=e&&("object"==typeof e?(o.set(r,e),o.connect([`${s}/${r}`])):o.save(s,r,e))}))}))}o.getDTtoolbox=()=>t;export{o as default};