dt-toolbox 4.0.4 → 4.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Changelog.md CHANGED
@@ -2,11 +2,36 @@
2
2
 
3
3
 
4
4
 
5
+ ### 4.0.7 (2022-03-03)
6
+ - [x] Library '@peter.naydenov/walk' was included as a dependency;
7
+ - [x] Cleaning: Method 'help.generateObject' was removed. Not in use anymore;
8
+ - [x] Cleaning: Method 'help.generateList' was removed. Not in use anymore;
9
+ - [x] Cleaning: Old convertor file 'convertors_oldVersion.js' was removed;
10
+ - [x] Refactoring: Convertor 'standard' is using 'walk';
11
+ - [x] Fix: Initialization with 'tuples' doesn't work;
12
+
13
+
14
+
15
+ ### 4.0.6 (2022-03-03)
16
+ - [x] Fix: Sometimes empty array structures are converted to empty objects;
17
+ - [ ] Bug: Initialization with 'tuples' doesn't work;
18
+
19
+
20
+
21
+ ### 4.0.5 (2022-03-01)
22
+ - [x] Fix: Arrays are recognized as objects. Object members of arrays are recognized as arrays;
23
+ - [ ] Bug: Sometimes empty array structures are converted to empty objects;
24
+ - [ ] Bug: Initialization with 'tuples' doesn't work;
25
+
26
+
27
+
5
28
  ### 4.0.4 (2022-03-01)
6
29
  - [x] Fix: Convertor for 'midFlat' is loosing empty data-structures;
7
30
  - [x] Fix: Boolean values "true" are converted to 1(number);
8
31
  - [x] Fix: Operation "add" treats numbers as string;
9
32
  - [x] Fix: Convertor from 'breadcrumbs' breaks;
33
+ - [ ] Bug: Arrays are recognized as objects. Object members of arrays are recognized as arrays;
34
+ - [ ] Bug: Initialization with 'tuples' doesn't work;
10
35
 
11
36
 
12
37
 
@@ -17,6 +42,7 @@
17
42
  - [ ] Bug: Boolean values "true" are converted to 1(number);
18
43
  - [ ] Bug: Operation "add" treats numbers as string;
19
44
  - [ ] Bug: Convertor from 'breadcrumbs' breaks;
45
+ - [ ] Bug: Initialization with 'tuples' doesn't work;
20
46
 
21
47
 
22
48
 
@@ -35,6 +61,7 @@
35
61
  - [ ] Bug: Boolean values "true" are converted to 1(number);
36
62
  - [ ] Bug: Operation "add" treats numbers as string;
37
63
  - [ ] Bug: Convertor from 'breadcrumbs' breaks;
64
+ - [ ] Bug: Initialization with 'tuples' doesn't work;
38
65
 
39
66
 
40
67
 
@@ -44,6 +71,7 @@
44
71
  - [x] Fix: Methods "add/update/overwrite/combine/append/prepend" expect by default data-type 'standard'. Should be a 'flat' data-type. This update is coming as major release because may require some changes. Everything else is according documentation for version 3.x.x;
45
72
  - [ ] Bug: Methods 'keep' and 'remove' received `flat keys` instead of `breadcrumbs keys`
46
73
  - [ ] Bug: Initialize with breadcrumbs is not working at all;
74
+ - [ ] Bug: Initialization with 'tuples' doesn't work;
47
75
  - [ ] Bug: Convertor for 'midFlat' is loosing empty data-structures;
48
76
  - [ ] Bug: Boolean values "true" are converted to 1(number);
49
77
  - [ ] Bug: Operation "add" treats numbers as string;
@@ -51,6 +79,7 @@
51
79
 
52
80
 
53
81
 
82
+
54
83
  ### 3.1.0 ( 2021-03-25)
55
84
  - [x] Methods "export" and "exportAll" were added;
56
85
  - [] Bug: Methods "add/update/overwrite/combine/append/prepend" expect by default data-type 'standard'. Should be a 'flat' data-type;
@@ -1 +1 @@
1
- var dtbox;(()=>{var e={702:e=>{e.exports=function(e,t){let r={};return Object.keys(e).forEach((s=>{t.hasOwnProperty(s)&&e[s]===t[s]||(r[s]=t[s])})),r}},86:e=>{e.exports=function(e,t){let r={};return Object.keys(t).forEach((s=>{e.hasOwnProperty(s)||(r[s]=t[s])})),r}},216:e=>{e.exports=function(e,t){let r={};return Object.keys(e).forEach((s=>{t.hasOwnProperty(s)&&e[s]===t[s]&&(r[s]=e[s])})),r}},218:(e,t,r)=>{const s=r(216),o=r(702),l=r(337),n=r(86),c=r(814);e.exports={identical:s,change:o,same:l,different:n,missing:c}},814:e=>{e.exports=function(e,t){let r={};return Object.keys(e).forEach((s=>{t.hasOwnProperty(s)||(r[s]=e[s])})),r}},337:e=>{e.exports=function(e,t){let r={};return Object.keys(e).forEach((e=>{t.hasOwnProperty(e)&&(r[e]=t[e])})),r}},270:e=>{"use strict";e.exports={toFlat:function(e,t){if(0===Object.keys(t).length)return[[["object",0]],{}];let{help:r}=e,s=[],o={},l=Object.keys(t).map((e=>e.split("/"))).sort(((e,t)=>t.length-e.length)),n={},c=[],u=[];return l.forEach((e=>{e.forEach(((t,r)=>{let s=e.slice(0,r).join("/");s&&(n[s]||(n[s]=new Set,c.push(s)),n[s].add(t))}))})),c.forEach(((e,t)=>{let o=!1;if(s[t]||(s[t]=["object",t]),u[t]&&(e=u[t]),o=Array.from(n[e]),"root"===e){const e=r.hasNumbers(o)?"array":"object";s[t][0]=e}o.forEach((o=>{let l=n[`${e}/${o}`];if(!l)return;let c=Array.from(l),i=r.hasNumbers(c)?"array":"object",a=s.length;u[a]=`${e}/${o}`,s.push([i,a]),s[t].push([a,o])}))})),l.forEach((e=>{let r=e.pop(),s=e.join("/"),l=null,n="";l=u.indexOf(s),l<0&&(l=c.indexOf(s)),n=`root/${l}/${r}`,o[n]=t[`${s}/${r}`]})),[s,o]},toType:function(e,t){let[r,s]=t,o=Object.keys(s),l={},n={};return r.forEach((e=>{let[t,s,...o]=e;o.forEach((e=>{let[t,o]=e,l=o,c=s;for(let e=s;e>=0;e--){let[t,s,...o]=r[e];o.forEach((e=>{let[t,r]=e;t===c&&(l=`${r}/${l}`,c=s)}))}n[t]=l}))})),o.forEach((e=>{let t=e.split("/"),r=t[1],o=n[r];"0"==r?t=t.filter(((e,t)=>1!=t)):t[1]=o,l[t.join("/")]=s[e]})),l}}},890:(e,t,r)=>{"use strict";const s=r(270),o=r(72),l=r(184),n=e=>(t,r)=>{let n,c,u,{help:i}=t,a=[];switch(e){case"std":case"standard":return o.toFlat(t,r);case"tuple":case"tuples":break;case"breadcrumb":case"breadcrumbs":return n=Object.keys(r),a=n.map((e=>r[e])),c=i.sanitizeFlatKeys(n),u=i.zipObject(c,a),s.toFlat(t,u);case"file":case"files":return n=r.map((e=>{let t=e.split("/");return a.push(t.pop()),t.join("/")})),c=i.sanitizeFlatKeys(n),u=i.zipObject(c,a),s.toFlat(t,u);case"midFlat":return l.toFlat(t,r)}return[["object",0],{}]};e.exports={from:function(e){return{toFlat:n(e)}},to:function(e,t,r){switch(e){case"std":case"standard":return o.toType(t,r);case"midFlat":return l.toType(t,r);case"breadcrumb":case"breadcrumbs":return s.toType(t,r)}}}},184:e=>{"use strict";e.exports={toFlat:function(e,t){if(0===Object.keys(t).length)return[[["object",0]],{}];let r=[],s={},{help:o}=e,l=Object.keys(t).map((e=>e.trim().replace(/\/$/,"").split("/"))).sort(((e,t)=>t.length-e.length)),n={},c=["root"],u=[];return l.forEach((e=>{e.forEach(((t,r)=>{let s=e.slice(0,r).join("/");s&&(n[s]||(n[s]=new Set,c.push(s)),n[s].add(t))}))})),Array.from(c.reduce(((e,t)=>{let r;e.add(t);const s=n[t];return null==s||(r=Array.from(s),r.forEach((r=>e.add(`${t}/${r}`)))),e}),new Set)).sort().forEach(((e,t)=>{let s;if(r[t]||(r[t]=["object",t],u[t]=e),u[t]&&(e=u[t]),null==e)return;const l=n[e];l&&l.forEach((t=>{let n=Array.from(l);s=r.length;let c=o.hasNumbers(n)?"array":"object";u[s]=`${e}/${t}`,r.push([c,s])}))})),u.forEach(((e,l)=>{let n,c,i=Object.keys(t[e]).map((e=>e.trim().replace(/\/$/,""))),a=o.hasNumbers(i),p=e.split("/");n=p.pop(),c=p.join("/");let d=u.indexOf(c);d>=0&&r[d].push([l,n]),r[l][0]=a?"array":"object",u[l]=e;for(let r in t[e])s[`root/${l}/${r}`]=t[e][r]})),[r,s]},toType:function(e,t){let r,[s,o]=t,l={root:{}},n={0:"root"};s.forEach(((e,t)=>{r=null!=n[t]?n[t]:"root",e.forEach(((e,t)=>{if(t<2)return;let[s,o]=e,c=`${r}/${o}`;l[c]={},n[s]=c}))}));let c=Object.keys(o);for(let e of c){let[,t,r]=e.split("/"),s=n[t];l[s][r]=o[e]}return l}}},72:e=>{"use strict";e.exports={toFlat:function(e,t){let r=[],s=!1,o=e.empty(),{findType:l,isItPrimitive:n,generateList:c}=e.help,u=[];r.push(c(0,t)),u.push([l(t),0]);for(let e of r)for(let[t,i,a]of e)if(s=n(a),s)o[`root/${t}/${i}`]=a;else{let e=u.length;u[t].push([e,i]),r.push(c(e,a)),u.push([l(a),e])}return[u,o]},toType:function(e,t){let[r,s]=t,o=Object.keys(s),l=[],n={};return r.forEach((e=>{let t,[r,c,...u]=e;t="array"==r?[]:{},o.filter((e=>e.includes(`root/${c}/`))).forEach((e=>{let r=e.split("/"),o=r[r.length-1];t[o]=s[e]})),n[c]=l.length,l.push(t)})),r.forEach((e=>{let[,t,...r]=e;r.forEach((e=>{let[r,s]=e;r=Number(r)||r;let o=n[r];l[t][s]=l[o]}))})),l[0]}}},423:e=>{e.exports=function(e){let t=[];return e.forEach(((e,r)=>{t.push([]),e.forEach((e=>t[r].push(e)))})),t}},634:e=>{e.exports=function(e){return e._select.value.reduce(((t,r)=>(t[r]=e.value[r],t)),{})}},906:e=>{e.exports=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s={},o=[];return t.forEach((t=>{let l=t.split("/"),n=l[1],c=l.pop();n==e&&(s[c]=r[t],o.push(t))})),[s,o]}},85:e=>{e.exports=function*(e,t){for(let r in t)yield[e,r,t[r]]}},500:e=>{e.exports=function*(e){let t={},r=new Set;for(let s of e){let e=s.pop(),o=s.join("/");r.has(o)||(r.add(o),t[o]=[]),t[o].push(e)}yield t}},35:e=>{e.exports=function(e){return!e.every((e=>{const t=Number(e);return 0!==t&&!t}))}},935:(e,t,r)=>{"use strict";const s=r(92),o=r(35),l=r(85),n=r(500),c=r(257),u=r(423),i=r(501),a=r(906),p=r(486),d=r(504),f=r(438),h=r(634),m=r(773);e.exports={findType:e=>e instanceof Array?"array":"object",hasNumbers:o,isItPrimitive:s,generateObject:n,generateList:l,sanitizeFlatKeys:c,copyStructure:u,objectsByLevel:i,filterObject:a,toBreadcrumbKeys:p,updateSelection:d,zipObject:f,extractSelection:h,reduceTuples:m}},92:e=>{e.exports=function(e){return"function"==typeof e||"object"!=typeof e}},501:e=>{e.exports=function(e){return e.reduce(((e,t)=>{let r=[];return t.forEach(((e,t)=>{t>1&&r.push(e[0])})),r.length>0&&e.push(r),e}),[[0]])}},773:e=>{e.exports=function(e,t){const{help:r}=e;return Object.keys(t).reduce(((e,s)=>{let o=s.substr(5).split("/"),l=o[o.length-1];return r.hasNumbers([l])&&o.pop(),e.push([o.join("/"),t[s]]),e}),[])}},257:e=>{e.exports=function(e){let t=e.map((e=>{let t=e.split("/");return"root"!=t[0]?["root",...t].join("/"):t.join("/")})),r=[],s=new Set;t.forEach((e=>{r.includes(e)?s.add(e):r.push(e)}));for(const e of s){let r=0;t=t.map((t=>t==e?`${t}/${r++}`:t))}return t}},486:e=>{e.exports=function(e,t){let r=["root"];return t.forEach((e=>{e.forEach(((t,s)=>{let o=e[1],l=r[o];s>1&&r.push(`${l}/${t[1]}`)}))})),e.map((e=>{let t=e.split("/"),s=t[1],o=t[2];return`${r[s]}/${o}`}))}},504:(e,t,r)=>{r(733),e.exports=function(e,t){let[...r]=e;return t.forEach((e=>{r.includes(e)||r.push(e)})),r}},438:e=>{e.exports=function(e,t){return e.reduce(((e,r,s)=>{let o,l=t[s];return o="string"==typeof l&&Number(l)||l,e[r]=o,e}),{})}},564:e=>{e.exports=function(e,t){const{structure:r,value:s}=t._select,o=new Set,l=new Set;let n=s.reduce(((e,t)=>{let r=parseInt(t.split("/")[1]);return o.add(r),r<e&&(e=r),e}),1e5);if(t._select.structure=r.reduce(((e,t)=>{let r=t[1];return r>=n&&o.has(r)&&(e.push([...t]),l.add(r)),e}),[["array",0]]),o.has(0)&&t._select.structure.splice(1,1),l.size>1){let e=0;l.forEach((r=>{let s=t._select.structure[0];0!=r&&s.push([r,e++])}))}else t._select.structure.splice(0,1);return t}},425:e=>{e.exports=function(e,t){const{convert:r,location:s}=e,o=r.to("midFlat",e,[t.structure,t.value]),{result:l}=t._select;if(!l)return t;for(k in l)newKey=k.replace("root",s),o[newKey]?o[newKey]={...o[newKey],...l[k]}:o[newKey]={...l[k]};return r.from("midFlat").toFlat(e,o)}},32:e=>{e.exports=function(e,t){const{type:r}=e,s=Object.keys(t.value);let o=t.structure.reduce(((e,t)=>(t[0]!=r||2==t.length&&e.push(t[1]),e)),[]);return t._select.value=s.filter((e=>{let t=parseInt(e.split("/")[1]);return o.includes(t)})),t._select.structure=[["array",0]],o.forEach(((e,r)=>{let s=t.structure[e][0];t._select.structure[0].push([e,r]),t._select.structure.push([s,e])})),t}},326:e=>{e.exports=function(e,t,r){const{convert:s,help:o,modifier:l}=e,n=s.to("midFlat",e,[t.structure,t.value]),c=s.to("midFlat",e,[r.structure,r.value]),u=Object.keys(c);let i;t._error=t._error.concat(r._error),i=u.reduce(((e,t)=>{let r=t.split("/").pop(),s=Object.keys(e.root);if("root"!=r&&e[t]){let r={};return r[t]={...c[t]},l.combineShallow(e,r)}if("root"!=r&&s.includes(r)){let r={};return r[t]={...c[t]},l.combineShallow(e,r)}return l.combineShallow(e,{root:{...c[t]}})}),n);let[a,p]=s.from("midFlat").toFlat(e,i);return t.structure=o.copyStructure(a),t.value=p,t}},911:e=>{e.exports=function(e,t){const{help:r,num:s,direction:o}=e;let l=[],n=[...t._select.value];return r.objectsByLevel(t.structure).forEach(((e,t)=>{("more"==o?t>=s:t<=s)&&(l=l.concat(e))})),t._select.value=n.filter((e=>{let t=parseInt(e.split("/")[1]);return l.includes(t)})),t}},699:e=>{e.exports=function(e,t){let r,s=Object.keys(t.value),{help:o,deep:l,search:n}=e,c=o.toBreadcrumbKeys(s,t.structure);n=n||"root",l=null==l?9999:l,l+=1,r=n.split("/").length+l;let u=c.filter((e=>e.match(n))).reduce(((e,t)=>{let o=c.indexOf(t);return t.split("/").length<=r&&e.push(s[o]),e}),[]);return t._select.value=o.updateSelection(t._select.value,u),t._select.structure=o.copyStructure(t.structure),t}},641:e=>{e.exports=function(e,t){const{help:r,prop:s,where:o}=e;let l=[],n=[],c=[];return"root"==s&&l.push(0),t.structure.forEach((e=>{e.forEach(((e,t)=>{if(t>1){let[t,r]=e;r==s&&l.push(t)}}))})),n=l.reduce(((e,r)=>{for(let s in t.value)s.split("/")[1]==r&&e.push(s);return e}),[]),c=o?l.reduce(((e,s)=>{let[l,c]=r.filterObject(s,n,t.value);return o(l)&&e.push(...c),e}),[]):n,t._select.value=r.updateSelection(t._select.value,c),t._select.structure=r.copyStructure(t.structure),t}},635:(e,t,r)=>{"use strict";const s=r(699),o=r(261),l=r(32),n=r(911),c=r(641),u={loadLong(e,t){let{structure:r,value:s}=t;return u._loadData(e,r,s)},loadShort(e,t){let[r,s]=t;return u._loadData(e,r,s)},_loadData(e,t,r){const{help:s,simpleDT:o}=e;let l=o();l.structure=s.copyStructure(t);for(const e in r)l.value[e]=r[e];return l},modify:r(483),find:s,parent:o,folder:c,deep:n,block:l,transform:r(348),attach:r(425),combine:r(326),assemble:r(564),purify:r(341)};e.exports=u},483:e=>{e.exports=function(e,t,r){const{action:s,convert:o,help:l,modifier:n}=e,c=o.to("midFlat",e,[t.structure,t.value]),u=o.to("midFlat",e,[r.structure,r.value]);let i;t._error=t._error.concat(r._error),i=n[s](c,u);let[a,p]=o.from("midFlat").toFlat(e,i);return t.structure=l.copyStructure(a),t.value=p,t}},261:e=>{e.exports=function(e,t){const{help:r,prop:s,where:o}=e;let l,n=[],c=[];for(let e in t.value){let t=e.split("/");t[2]==s&&n.push(t[1])}return t.structure.forEach((e=>{e.forEach(((e,r)=>{if(r>1&&e[1]==s){let r=e[0];"array"==t.structure[r][0]&&n.push(r)}}))})),c=n.reduce(((e,r)=>{for(let s in t.value)s.split("/")[1]==r&&e.push(s);return e}),[]),l=o?n.reduce(((e,s)=>{let[l,n]=r.filterObject(s,c,t.value);return o(l)&&e.push(...n),e}),[]):c,t._select.value=r.updateSelection(t._select.value,l),t._select.structure=r.copyStructure(t.structure),t}},341:(e,t,r)=>{r(733),e.exports=function(e,t){const{structure:r,value:s}=t._select,o=r.reverse();let l=s.reduce(((e,t)=>{let r=parseInt(t.split("/")[1]);return e.includes(r)||e.push(r),e}),[]);return t._select.structure=o.reduce(((e,t)=>{let[r,s,...o]=t,n=t.length,c=[r,s];return 2!=n||l.includes(s)?(o.forEach((e=>{let t=e[0];l.includes(t)&&(c.push([...e]),l.includes(s)||l.push(s))})),l.includes(s)?(e.push([...c]),e):e):e}),[]).reverse(),t}},348:e=>{e.exports=function(e,t){let r,[s,o]=t,{modify:l,empty:n}=e,c=Object.keys(o);switch(l){case"reverse":r=c.reduce(((e,t)=>{let r=t.split("/"),s=r[2].match(/^[0-9]+$/)?parseInt(r[2]):r[2],l=o[t];return e[`root/${r[1]}/${l}`]=s,e}),{});break;case"key":case"keys":r=c.reduce(((e,t,r)=>{let s=t.split("/");return e[`root/0/${r}`]=s[2],e}),{}),s=[["array",0]];break;case"value":case"values":r=c.reduce(((e,t,r)=>{let s=o[t];return e[`root/0/${r}`]=s,e}),n()),s=[["array",0]];break;default:r=n()}return[s,r]}},880:(e,t,r)=>{"use strict";const s=r(635),o=r(935),l=r(631),n=r(890),c=r(218),u=["std","standard","tuple","tuples","breadcrumb","breadcrumbs","file","files","midFlat","shortFlat"],i={dependencies:()=>({simpleDT:function(){const e=Object.create(p);return e.value=e.empty(),e.structure=[],e._select={structure:[],value:[],result:null},e._error=[],e},empty:Object.create(p).empty,convert:n,help:o,modifier:l}),init(e,t){let r=i.dependencies(),o=r.simpleDT(),l=r.help,{type:c,modify:a}={type:"std",modify:!1,...t};if(u.includes(c)){if(null!=e){const[t,s]="flat"==c||"shortFlat"==c?e:n.from(c).toFlat(r,e);o.structure=l.copyStructure(t),o.value=s}if(a){let[t,l]=s.transform({...r,modify:a},[o.structure,o.value]);return Object.keys(l).length<=0&&o._error.push(`Modifier "${a}" is not a valid modifier and was ignored. Data: ${JSON.stringify(e)}`),o.structure=t,o.value=l,o}return o}this._error.push(`Can't understand your data-type: ${c}. Please, find what is possible on https://github.com/PeterNaydenov/dt-toolbox`)},load:e=>e._select?s.loadLong(i.dependencies(),e):s.loadShort(i.dependencies(),e),preprocess(e,t,r){let{type:o="std"}={type:"std",modify:!1,...r},l=t(n.from(o).toFlat(i.dependencies(),e));return l?s.loadShort(i.dependencies(),l):(this._error.push('Method "preprocess" should always return a shortFlat data-type: [structure, value]'),i.init())},combine(e,t){const r=i.init(e,t);return s.combine({...i.dependencies()},this,r)},modify:e=>function(t,r){let l;return l=r?i.init(t,r):{structure:o.copyStructure(t.structure),value:{...t.value}},s.modify({...i.dependencies(),action:e},this,l)},errorLog(e){return e(this._error),this},replace(){const e=this,{result:t}=e._select;if(!t)return e;let[r,s]=n.from("midFlat").toFlat(i.dependencies(),t);return e.structure=o.copyStructure(r),e.value={...s},e._select.result=null,e},attach(e){const t=this,r={...i.dependencies(),location:e};let[l,n]=s.attach(r,t);return t.structure=o.copyStructure(l),t.value={...n},t._select.result=null,t},select(){return this._select={structure:[],value:[],result:null},this},find(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"root",t=arguments.length>1?arguments[1]:void 0;const r={...i.dependencies(),search:e,deep:t};return this._select.result=null,s.find(r,this)},parent(e,t){const r={...i.dependencies(),prop:e,where:t};return this._select.result=null,s.parent(r,this)},folder(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"root",t=arguments.length>1?arguments[1]:void 0;const r={...i.dependencies(),prop:e,where:t};return this._select.result=null,s.folder(r,this)},limit(e){return this._select.value=this._select.value.slice(0,e),this._select.result=null,this},keep(e){const t=this,r=o.toBreadcrumbKeys(t._select.value,t.structure);return void 0===e||(t._select.result=null,t._select.value=t._select.value.reduce(((s,o,l)=>{let n=r[l];return e(t.value[o],n,o)&&s.push(o),s}),[])),t},remove(e){const t=this,r=o.toBreadcrumbKeys(t._select.value,t.structure);return void 0===e||(t._select.result=null,t._select.value=t._select.value.reduce(((s,o,l)=>{let n=r[l];return e(t.value[o],n,o)||s.push(o),s}),[])),t},deep(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"less",r={...i.dependencies(),num:e,direction:t};return this._select.result=null,s.deep(r,this)},withData(){let e=this;return e._select.result=n.to("midFlat",i.dependencies(),[e.structure,e.value]),e},withSelection(){let e=this,{structure:t}=e._select;return e._select.result=n.to("midFlat",i.dependencies(),[t,o.extractSelection(e)]),e},flatten(){const e=this,{result:t}=e._select;return t?(e._select.result=l.flatten(t,{}),e):e},mix(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"root",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const r=this,{result:s}=r._select;return s?(r._select.result=l.mix(s,[...t,e]),r):r},reverse(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["root"];const t=this,{result:r}=t._select;return r?(t._select.result=l.reverse(r,e),t):t},keyPrefix(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=this,{result:r}=t._select;return r?(t._select.result=l.keyPrefix(r,{separationSymbol:e}),t):t},block:e=>function(){const t={...i.dependencies(),type:e};return this._select.result=null,s.block(t,this)},invert(){const e=this,t=e._select.value,r=Object.keys(e.value);return e._select.result=null,e._select.value=r.reduce(((e,r)=>(t.includes(r)||e.push(r),e)),[]),e},assemble(){const e={...i.dependencies()};return s.assemble(e,this)},purify(){const e={...i.dependencies()};return s.purify(e,this)},compare:e=>function(t,r){if(!t.hasOwnProperty("value")||!t.hasOwnProperty("structure"))return r(null),this;let s=this,o=n.to("breadcrumb",i.dependencies(),[s.structure,s.value]),l=n.to("breadcrumb",i.dependencies(),[t.structure,t.value]),u=c[e](o,l),[a,p]=n.from("breadcrumb").toFlat(i.dependencies(),u),d=i.dependencies().simpleDT();return d.structure=a,d.value=p,r(d),s},spread(e,t){const r=this,o=!!r._select.result,{help:l}=i.dependencies();let c,u,a;switch(e){case"value":case"values":if(u="values",o){let e=n.from("midFlat").toFlat(i.dependencies(),r._select.result);a=s.transform({...i.dependencies(),modify:u},e)}else a=s.transform({...i.dependencies(),modify:u},[r.structure,r.value]);c=n.to("std",i.dependencies(),a).map((e=>"string"==typeof e&&Number(e)||e));break;case"key":case"keys":if(u="keys",o){let e=n.from("midFlat").toFlat(i.dependencies(),r._select.result);a=s.transform({...i.dependencies(),modify:u},e),u="values",a=s.transform({...i.dependencies(),modify:u},a)}else a=s.transform({...i.dependencies(),modify:u},[r.structure,r.value]);c=n.to("std",i.dependencies(),a);break;case"standard":case"std":if(o){let e=n.from("midFlat").toFlat(i.dependencies(),r._select.result);c=n.to("std",i.dependencies(),e)}else c=n.to("std",i.dependencies(),[r._select.structure,l.extractSelection(r)]);break;case"breadcrumb":case"breadcrumbs":if(o){let e=n.from("midFlat").toFlat(i.dependencies(),r._select.result);c=n.to("breadcrumbs",i.dependencies(),e)}else c=n.to("breadcrumbs",i.dependencies(),[r._select.structure,l.extractSelection(r)]);break;case"tuples":let e;if(o){let t=n.from("midFlat").toFlat(i.dependencies(),r._select.result);e=n.to("breadcrumbs",i.dependencies(),t)}else e=n.to("breadcrumbs",i.dependencies(),[r._select.structure,l.extractSelection(r)]);c=l.reduceTuples(i.dependencies(),e);break;case"file":case"files":let t,p;if(o){let e=n.from("midFlat").toFlat(i.dependencies(),r._select.result);t=n.to("breadcrumbs",i.dependencies(),e)}else t=n.to("breadcrumbs",i.dependencies,[r._select.structure,l.extractSelection(r)]);p=l.reduceTuples(i.dependencies(),t),c=p.map((e=>{let[t,r]=e;return t?`${t}/${r}`:r}));break;case"midFlat":c=o?{...r._select.result}:n.to("midFlat",i.dependencies(),[r._select.structure,l.extractSelection(r)]);break;default:if(o)c=n.from("midFlat").toFlat(i.dependencies(),r._select.result);else{let e=l.extractSelection(r);c=[l.copyStructure(r._select.structure),e]}}return t?(t(c),r):c},spreadAll(e,t){return this.all(),this.spread(e,t)}},a={hi:()=>"hi"},p={init:i.init,load:i.load,loadFast:i.load,preprocess:i.preprocess,add:i.modify("add"),update:i.modify("update"),overwrite:i.modify("overwrite"),insert:i.modify("insert"),combine:i.combine,append:i.modify("append"),prepend:i.modify("prepend"),log:i.errorLog,empty:()=>Object.create(a),replace:i.replace,attach:i.attach,spread:i.spread,spreadAll:i.spreadAll,export:i.spread,exportAll:i.spreadAll,identical:i.compare("identical"),change:i.compare("change"),same:i.compare("same"),different:i.compare("different"),missing:i.compare("missing"),select:i.select,parent:i.parent,find:i.find,all:i.find,folder:i.folder,space:i.folder,deepObject:i.block("object"),deepArray:i.block("array"),invert:i.invert,assemble:i.assemble,purify:i.purify,limit:i.limit,keep:i.keep,remove:i.remove,deep:i.deep,withData:i.withData,withSelection:i.withSelection,flatten:i.flatten,mix:i.mix,keyPrefix:i.keyPrefix,reverse:i.reverse};e.exports=p},429:e=>{e.exports=function(e,t){for(const r in t)if(e[r])for(let s in t[r])e[r][s]||(e[r][s]=t[r][s]);else e[r]={...t[r]};return e}},57:e=>{e.exports=function(e,t){for(const r in t)if(e[r])for(let s in t[r])e[r][s]?e[r][s]+=t[r][s]:e[r][s]=t[r][s];return e}},785:e=>{function t(e){let t=0;for(k in e)!isNaN(parseInt(k))&&t++;return t}e.exports=function(e,r){let s=Object.keys(e),o=Object.keys(r),l=[...s],n={root:{}},c={};for(key of o)l.includes(key)||l.push(key);let u=l.sort(((e,t)=>t.split("/").length-e.split("/").length)).reduce(((t,s)=>{let o=e.root,l=r[s],n=s.split("/").pop();for(k in Object.keys(o),"root"!=s&&e[s]&&(t.add(n),c[n]||(c[n]=[]),c[n]=Object.keys(e[s]).reduce(((t,r)=>(t.push(e[s][r]),t)),c[n])),"root"!=n&&l&&(t.add(n),c[n]||(c[n]=[]),c[n]=Object.keys(l).reduce(((e,t)=>(e.push(l[t]),e)),c[n])),l)e[`root/${k}`]&&l[k]&&(t.add(k),c[k]||(c[k]=[]),c[k].push(l[k])),o[k]&&l[k]&&(t.add(k),c[k]?c[k].push(l[k]):c[k]=[o[k],l[k]]);return t}),new Set);for(k in s.forEach((t=>{let r=e[t];for(k in n[t]={},r)u.has(k)||(n[t][k]=r[k])})),o.forEach((e=>{let s=r[e],o=Object.keys(s),l=e.split("/").pop();u.has(l)||o.forEach((r=>{let o=`root/${r}`;if(n[o]){let e=t(n[o]);n[o][e]=s[r]}else u.has(r)||(n[e][r]=s[r])}))})),c){const e=`root/${k}`;n[e]=c[k].reduce(((e,t,r)=>(e[r]=t,e)),{})}return n}},875:(e,t,r)=>{const s=r(785);e.exports=function(e){let t=Object.keys(e).filter((e=>"root"!=e)).reduce(((t,r)=>{let o={root:{...e[r]}};return s(t,o)}),{root:{...e.root}});return Object.keys(t).filter((e=>"root"!=e)).reduce(((e,r)=>{let s=r.split("/")[1],o="";for(prop in t[r])o&&(o+=";"),o+=t[r][prop];return e.root[s]=o,e}),{root:{...t.root}})}},631:(e,t,r)=>{const s=r(366),o=r(733),l={add:r(429),update:o,overwrite:s,insert:r(655),append:r(57),prepend:r(869),keyPrefix:r(432),flatten:r(875),combineShallow:r(785),mix:r(558),reverse:r(248)};e.exports=l},655:e=>{e.exports=function(e,t){for(const r in t){let s=Object.values(e[r]),o=Object.values(t[r]),l=s.concat(o);e[r]=l.reduce(((e,t,r)=>(e[r]=t,e)),{})}return e}},432:e=>{e.exports=function(e,t){let r=Object.keys(e),{separationSymbol:s}=t;return r.reduce(((t,r)=>{let o=r.substr(5).split("/").join(s);return t[r]={},Object.keys(e[r]).forEach((l=>{"root"==r?t[r][l]=e.root[l]:t[r][`${o}${s}${l}`]=e[r][l]})),t}),{})}},558:(e,t,r)=>{r(326);const s=r(785);e.exports=function(e,t){const r=t.pop();let o={};return o[r]={...e[r]},o.root||(o.root={...e.root}),t.reduce(((t,o)=>{let l={root:{...t[r]}},n={root:{...e[o]}};return t[r]=s(l,n).root,t}),o)}},366:e=>{e.exports=function(e,t){for(const r in t)if(e[r])for(let s in t[r])e[r][s]=t[r][s];else e[r]={...t[r]};return e}},869:e=>{e.exports=function(e,t){for(const r in t)if(e[r])for(let s in t[r]){const o=e[r][s];e[r][s]=o?t[r][s]+o:t[r][s]}return e}},248:e=>{e.exports=function(e,t){let r={...e};for(const e of t)if(r[e]){let t={...r[e]},s=Object.keys(t);r[e]={},s.forEach((s=>{let o=t[s];r[e][o]=s}))}return r}},733:e=>{e.exports=function(e,t){for(const r in t)if(e.hasOwnProperty(r))for(let s in t[r])e[r].hasOwnProperty(s)&&(e[r][s]=t[r][s]);return e}}},t={},r=function r(s){var o=t[s];if(void 0!==o)return o.exports;var l=t[s]={exports:{}};return e[s](l,l.exports,r),l.exports}(880);dtbox=r})();
1
+ var dtbox;(()=>{var e={60:e=>{function t(e){return e instanceof Array?"array":"object"==typeof e?"object":"simple"}function*r(e,t,r,l,n){yield s(t,e,r,l,n)}function s(e,s,l,n,o){let c,[u,i]=n;c=i?i(e,o):e,null!=c&&("simple"!=t(c)?Object.keys(c).forEach((e=>{const i=t(c[e]);if("simple"===i){if(!u)return void(s[e]=c[e]);let t=u(c[e],e,`${o}/${e}`);if(null==t)return;s[e]=t}"object"===i&&(s[e]={},l.push(r(s[e],c[e],l,n,`${o}/${e}`))),"array"===i&&(s[e]=[],l.push(r(s[e],c[e],l,n,`${o}/${e}`)))})):"array"==t(s)?s.push(c):s[c]=c)}e.exports=function(e,r){let l,n=t(e),o=[],c="root",u=function(e){let t=null,r=null;return"function"==typeof e?t=e:e instanceof Array&&(t=e[0],r=e[1]),[t,r]}(r);switch(n){case"array":l=[],s(e,l,o,u,c);break;case"object":l={},s(e,l,o,u,c);break;case"simple":return e}for(const e of o)e.next();return l}},702:e=>{e.exports=function(e,t){let r={};return Object.keys(e).forEach((s=>{t.hasOwnProperty(s)&&e[s]===t[s]||(r[s]=t[s])})),r}},86:e=>{e.exports=function(e,t){let r={};return Object.keys(t).forEach((s=>{e.hasOwnProperty(s)||(r[s]=t[s])})),r}},216:e=>{e.exports=function(e,t){let r={};return Object.keys(e).forEach((s=>{t.hasOwnProperty(s)&&e[s]===t[s]&&(r[s]=e[s])})),r}},218:(e,t,r)=>{const s=r(216),l=r(702),n=r(337),o=r(86),c=r(814);e.exports={identical:s,change:l,same:n,different:o,missing:c}},814:e=>{e.exports=function(e,t){let r={};return Object.keys(e).forEach((s=>{t.hasOwnProperty(s)||(r[s]=e[s])})),r}},337:e=>{e.exports=function(e,t){let r={};return Object.keys(e).forEach((e=>{t.hasOwnProperty(e)&&(r[e]=t[e])})),r}},270:e=>{"use strict";e.exports={toFlat:function(e,t){if(0===Object.keys(t).length)return[[["object",0]],{}];let{help:r}=e,s=[],l={},n=Object.keys(t).map((e=>e.split("/"))).sort(((e,t)=>t.length-e.length)),o={},c=[],u=[];return n.forEach((e=>{e.forEach(((t,r)=>{let s=e.slice(0,r).join("/");s&&(o[s]||(o[s]=new Set,c.push(s)),o[s].add(t))}))})),c.forEach(((e,t)=>{let l=!1;if(s[t]||(s[t]=["object",t]),u[t]&&(e=u[t]),l=Array.from(o[e]),"root"===e){const e=r.hasNumbers(l)?"array":"object";s[t][0]=e}l.forEach((l=>{let n=o[`${e}/${l}`];if(!n)return;let c=Array.from(n),i=r.hasNumbers(c)?"array":"object",a=s.length;u[a]=`${e}/${l}`,s.push([i,a]),s[t].push([a,l])}))})),n.forEach((e=>{let r=e.pop(),s=e.join("/"),n=null,o="";n=u.indexOf(s),n<0&&(n=c.indexOf(s)),o=`root/${n}/${r}`,l[o]=t[`${s}/${r}`]})),[s,l]},toType:function(e,t){let[r,s]=t,l=Object.keys(s),n={},o={};return r.forEach((e=>{let[t,s,...l]=e;l.forEach((e=>{let[t,l]=e,n=l,c=s;for(let e=s;e>=0;e--){let[t,s,...l]=r[e];l.forEach((e=>{let[t,r]=e;t===c&&(n=`${r}/${n}`,c=s)}))}o[t]=n}))})),l.forEach((e=>{let t=e.split("/"),r=t[1],l=o[r];"0"==r?t=t.filter(((e,t)=>1!=t)):t[1]=l,n[t.join("/")]=s[e]})),n}}},890:(e,t,r)=>{"use strict";const s=r(270),l=r(500),n=r(184),o=e=>(t,r)=>{let o,c,u,{help:i}=t,a=[];switch(e){case"std":case"standard":return l.toFlat(t,r);case"tuple":case"tuples":r=i.tuplesToBradcrumbs(t,r);case"breadcrumb":case"breadcrumbs":return o=Object.keys(r),a=o.map((e=>r[e])),c=i.sanitizeFlatKeys(o),u=i.zipObject(c,a),s.toFlat(t,u);case"file":case"files":return o=r.map((e=>{let t=e.split("/");return a.push(t.pop()),t.join("/")})),c=i.sanitizeFlatKeys(o),u=i.zipObject(c,a),s.toFlat(t,u);case"midFlat":return n.toFlat(t,r)}return[["object",0],{}]};e.exports={from:function(e){return{toFlat:o(e)}},to:function(e,t,r){const{help:o}=t;switch(e){case"std":case"standard":return l.toType(t,r);case"midFlat":return n.toType(t,r);case"tuple":case"tuples":let e=s.toType(t,r);return o.reduceTuples(t,e);case"breadcrumb":case"breadcrumbs":return s.toType(t,r)}}}},184:e=>{"use strict";e.exports={toFlat:function(e,t){if(0===Object.keys(t).length)return[[["object",0]],{}];let r=[],s={},{help:l}=e,n=Object.keys(t).map((e=>e.trim().replace(/\/$/,"").split("/"))).sort(((e,t)=>t.length-e.length)),o={},c=["root"],u=[];return n.forEach((e=>{e.forEach(((t,r)=>{let s=e.slice(0,r).join("/");s&&(o[s]||(o[s]=new Set,c.push(s)),o[s].add(t))}))})),Array.from(c.reduce(((e,t)=>{let r;e.add(t);const s=o[t];return null==s||(r=Array.from(s),r.forEach((r=>e.add(`${t}/${r}`)))),e}),new Set)).sort().forEach(((e,t)=>{let s;if(r[t]||(r[t]=["object",t],u[t]=e),u[t]&&(e=u[t]),null==e)return;const n=o[e];if(!n)return;let c=Array.from(n);l.hasNumbers(c)&&(r[t][0]="array"),n.forEach((t=>{s=r.length,u[s]=`${e}/${t}`,r.push(["object",s])}))})),u.forEach(((e,n)=>{let o,c,i=Object.keys(t[e]).map((e=>e.trim().replace(/\/$/,""))),a=l.hasNumbers(i),p=e.split("/");o=p.pop(),c=p.join("/");let d=u.indexOf(c);d>=0&&r[d].push([n,o]),a&&(r[n][0]="array"),u[n]=e;for(let r in t[e]){let l=t[e][r];if("_fake$$$"===l)return;s[`root/${n}/${r}`]=l}})),[r,s]},toType:function(e,t){let r,[s,l]=t,n={root:{}},o={0:"root"};s.forEach(((e,t)=>{r=null!=o[t]?o[t]:"root",e.forEach(((e,t)=>{if(t<2)return;let[s,l]=e,c=`${r}/${l}`;n[c]={},o[s]=c}))}));let c=Object.keys(l),u=new Set;for(let e of c){let[,t,r]=e.split("/"),s=o[t];u.add(t),n[s][r]=l[e]}return s.forEach((e=>{let[t,r,...s]=e,l=o[r],c=!u.has(r.toString()),i=!(s.length>0);"array"===t&&c&&i&&(n[l][-1]="_fake$$$")})),n}}},500:e=>{"use strict";e.exports={toFlat:function(e,t){let r=e.empty(),{help:s,walk:l}=e,{findType:n}=s,o=[],c=0,u=0,i={};return l(t,[function(e,t,s){return r[`root/${u}/${t}`]=e,e},function(e,t){let r=t.split("/"),s=r.pop();if(o.push([n(e),c]),i[t]=c,u=c,r.length>0){let e=r.join("/"),t=i[e];o[t].push([c,s])}return c++,e}]),[o,r]},toType:function(e,t){let[r,s]=t,l=Object.keys(s),n=[],o={};return r.forEach((e=>{let t,[r,c,...u]=e;t="array"==r?[]:{},l.filter((e=>e.includes(`root/${c}/`))).forEach((e=>{let r=e.split("/"),l=r[r.length-1];t[l]=s[e]})),o[c]=n.length,n.push(t)})),r.forEach((e=>{let[,t,...r]=e;r.forEach((e=>{let[r,s]=e;r=Number(r)||r;let l=o[r];n[t][s]=n[l]}))})),n[0]}}},634:e=>{e.exports=function(e){return e._select.value.reduce(((t,r)=>(t[r]=e.value[r],t)),{})}},906:e=>{e.exports=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s={},l=[];return t.forEach((t=>{let n=t.split("/"),o=n[1],c=n.pop();o==e&&(s[c]=r[t],l.push(t))})),[s,l]}},35:e=>{e.exports=function(e){return!e.every((e=>{const t=Number(e);return 0!==t&&!t}))}},935:(e,t,r)=>{"use strict";const s=r(92),l=r(35),n=r(257),o=r(501),c=r(906),u=r(486),i=r(504),a=r(438),p=r(634),d=r(773),f=r(943);e.exports={findType:e=>e instanceof Array?"array":"object",hasNumbers:l,isItPrimitive:s,sanitizeFlatKeys:n,objectsByLevel:o,filterObject:c,toBreadcrumbKeys:u,updateSelection:i,zipObject:a,extractSelection:p,reduceTuples:d,tuplesToBradcrumbs:f}},92:e=>{e.exports=function(e){return"function"==typeof e||"object"!=typeof e}},501:e=>{e.exports=function(e){return e.reduce(((e,t)=>{let r=[];return t.forEach(((e,t)=>{t>1&&r.push(e[0])})),r.length>0&&e.push(r),e}),[[0]])}},773:e=>{"use strict";e.exports=function(e,t){const{help:r,walk:s}=e,l=[];return s(t,((e,t)=>{let s=t.substr(5).split("/"),n=s[s.length-1];r.hasNumbers([n])&&s.pop(),l.push([s.join("/"),e])})),l}},257:e=>{e.exports=function(e){let t=e.map((e=>{let t=e.split("/");return"root"!=t[0]?["root",...t].join("/"):t.join("/")})),r=[],s=new Set;t.forEach((e=>{r.includes(e)?s.add(e):r.push(e)}));for(const e of s){let r=0;t=t.map((t=>t==e?`${t}/${r++}`:t))}return t}},486:e=>{e.exports=function(e,t){let r=["root"];return t.forEach((e=>{e.forEach(((t,s)=>{let l=e[1],n=r[l];s>1&&r.push(`${n}/${t[1]}`)}))})),e.map((e=>{let t=e.split("/"),s=t[1],l=t[2];return`${r[s]}/${l}`}))}},943:e=>{"use strict";e.exports=function(e,t){const{walk:r}=e;let s={};return r(t,[null,function(e,t){if("root"===t)return e;let[r,l]=e;return s[r]=l,e}]),s}},504:(e,t,r)=>{r(733),e.exports=function(e,t){let[...r]=e;return t.forEach((e=>{r.includes(e)||r.push(e)})),r}},438:e=>{e.exports=function(e,t){return e.reduce(((e,r,s)=>{let l,n=t[s];return l="string"==typeof n&&Number(n)||n,e[r]=l,e}),{})}},564:e=>{e.exports=function(e,t){const{structure:r,value:s}=t._select,l=new Set,n=new Set;let o=s.reduce(((e,t)=>{let r=parseInt(t.split("/")[1]);return l.add(r),r<e&&(e=r),e}),1e5);if(t._select.structure=r.reduce(((e,t)=>{let r=t[1];return r>=o&&l.has(r)&&(e.push([...t]),n.add(r)),e}),[["array",0]]),l.has(0)&&t._select.structure.splice(1,1),n.size>1){let e=0;n.forEach((r=>{let s=t._select.structure[0];0!=r&&s.push([r,e++])}))}else t._select.structure.splice(0,1);return t}},425:e=>{e.exports=function(e,t){const{convert:r,location:s}=e,l=r.to("midFlat",e,[t.structure,t.value]),{result:n}=t._select;if(!n)return t;for(k in n)newKey=k.replace("root",s),l[newKey]?l[newKey]={...l[newKey],...n[k]}:l[newKey]={...n[k]};return r.from("midFlat").toFlat(e,l)}},32:e=>{e.exports=function(e,t){const{type:r}=e,s=Object.keys(t.value);let l=t.structure.reduce(((e,t)=>(t[0]!=r||2==t.length&&e.push(t[1]),e)),[]);return t._select.value=s.filter((e=>{let t=parseInt(e.split("/")[1]);return l.includes(t)})),t._select.structure=[["array",0]],l.forEach(((e,r)=>{let s=t.structure[e][0];t._select.structure[0].push([e,r]),t._select.structure.push([s,e])})),t}},326:e=>{e.exports=function(e,t,r){const{convert:s,modifier:l,walk:n}=e,o=s.to("midFlat",e,[t.structure,t.value]),c=s.to("midFlat",e,[r.structure,r.value]),u=Object.keys(c);let i;t._error=t._error.concat(r._error),i=u.reduce(((e,t)=>{let r=t.split("/").pop(),s=Object.keys(e.root);if("root"!=r&&e[t]){let r={};return r[t]={...c[t]},l.combineShallow(e,r)}if("root"!=r&&s.includes(r)){let r={};return r[t]={...c[t]},l.combineShallow(e,r)}return l.combineShallow(e,{root:{...c[t]}})}),o);let[a,p]=s.from("midFlat").toFlat(e,i);return t.structure=n(a),t.value=p,t}},911:e=>{e.exports=function(e,t){const{help:r,num:s,direction:l}=e;let n=[],o=[...t._select.value];return r.objectsByLevel(t.structure).forEach(((e,t)=>{("more"==l?t>=s:t<=s)&&(n=n.concat(e))})),t._select.value=o.filter((e=>{let t=parseInt(e.split("/")[1]);return n.includes(t)})),t}},699:e=>{e.exports=function(e,t){let r,s=Object.keys(t.value),{help:l,deep:n,search:o,walk:c}=e,u=l.toBreadcrumbKeys(s,t.structure);o=o||"root",n=null==n?9999:n,n+=1,r=o.split("/").length+n;let i=u.filter((e=>e.match(o))).reduce(((e,t)=>{let l=u.indexOf(t);return t.split("/").length<=r&&e.push(s[l]),e}),[]);return t._select.value=l.updateSelection(t._select.value,i),t._select.structure=c(t.structure),t}},641:e=>{e.exports=function(e,t){const{help:r,prop:s,walk:l,where:n}=e;let o=[],c=[],u=[];return"root"==s&&o.push(0),t.structure.forEach((e=>{e.forEach(((e,t)=>{if(t>1){let[t,r]=e;r==s&&o.push(t)}}))})),c=o.reduce(((e,r)=>{for(let s in t.value)s.split("/")[1]==r&&e.push(s);return e}),[]),u=n?o.reduce(((e,s)=>{let[l,o]=r.filterObject(s,c,t.value);return n(l)&&e.push(...o),e}),[]):c,t._select.value=r.updateSelection(t._select.value,u),t._select.structure=l(t.structure),t}},635:(e,t,r)=>{"use strict";const s=r(699),l=r(261),n=r(32),o=r(911),c=r(641),u={loadLong(e,t){let{structure:r,value:s}=t;return u._loadData(e,r,s)},loadShort(e,t){let[r,s]=t;return u._loadData(e,r,s)},_loadData(e,t,r){const{simpleDT:s,walk:l}=e;let n=s();n.structure=l(t);for(const e in r)n.value[e]=r[e];return n},modify:r(483),find:s,parent:l,folder:c,deep:o,block:n,transform:r(348),attach:r(425),combine:r(326),assemble:r(564),purify:r(341)};e.exports=u},483:e=>{e.exports=function(e,t,r){const{action:s,convert:l,modifier:n,walk:o}=e,c=l.to("midFlat",e,[t.structure,t.value]),u=l.to("midFlat",e,[r.structure,r.value]);let i;t._error=t._error.concat(r._error),i=n[s](c,u);let[a,p]=l.from("midFlat").toFlat(e,i);return t.structure=o(a),t.value=p,t}},261:e=>{e.exports=function(e,t){const{help:r,prop:s,walk:l,where:n}=e;let o,c=[],u=[];for(let e in t.value){let t=e.split("/");t[2]==s&&c.push(t[1])}return l(t.structure,[null,function(e,t){if("root"===t)return e;if("string"==typeof e[0])return e;let[r,l]=e;return l===s&&c.push(r),null}]),u=c.reduce(((e,r)=>{for(let s in t.value)s.split("/")[1]==r&&e.push(s);return e}),[]),o=n?c.reduce(((e,s)=>{let[l,o]=r.filterObject(s,u,t.value);return n(l)&&e.push(...o),e}),[]):u,t._select.value=r.updateSelection(t._select.value,o),t._select.structure=l(t.structure),t}},341:(e,t,r)=>{r(733),e.exports=function(e,t){const{structure:r,value:s}=t._select,l=r.reverse();let n=s.reduce(((e,t)=>{let r=parseInt(t.split("/")[1]);return e.includes(r)||e.push(r),e}),[]);return t._select.structure=l.reduce(((e,t)=>{let[r,s,...l]=t,o=t.length,c=[r,s];return 2!=o||n.includes(s)?(l.forEach((e=>{let t=e[0];n.includes(t)&&(c.push([...e]),n.includes(s)||n.push(s))})),n.includes(s)?(e.push([...c]),e):e):e}),[]).reverse(),t}},348:e=>{e.exports=function(e,t){let r,[s,l]=t,{modify:n,empty:o}=e,c=Object.keys(l);switch(n){case"reverse":r=c.reduce(((e,t)=>{let r=t.split("/"),s=r[2].match(/^[0-9]+$/)?parseInt(r[2]):r[2],n=l[t];return e[`root/${r[1]}/${n}`]=s,e}),{});break;case"key":case"keys":r=c.reduce(((e,t,r)=>{let s=t.split("/");return e[`root/0/${r}`]=s[2],e}),{}),s=[["array",0]];break;case"value":case"values":r=c.reduce(((e,t,r)=>{let s=l[t];return e[`root/0/${r}`]=s,e}),o()),s=[["array",0]];break;default:r=o()}return[s,r]}},880:(e,t,r)=>{"use strict";const s=r(635),l=r(935),n=r(631),o=r(890),c=r(218),u=r(60),i=["std","standard","tuple","tuples","breadcrumb","breadcrumbs","file","files","midFlat","shortFlat"],a={dependencies:()=>({simpleDT:function(){const e=Object.create(d);return e.value=e.empty(),e.structure=[],e._select={structure:[],value:[],result:null},e._error=[],e},empty:Object.create(d).empty,convert:o,help:l,modifier:n,walk:u}),init(e,t){let r=a.dependencies(),l=r.simpleDT(),{type:n,modify:c}=(r.help,{type:"std",modify:!1,...t});if(i.includes(n)){if(null!=e){const[t,s]="flat"==n||"shortFlat"==n?e:o.from(n).toFlat(r,e);l.structure=u(t),l.value=s}if(c){let[t,n]=s.transform({...r,modify:c},[l.structure,l.value]);return Object.keys(n).length<=0&&l._error.push(`Modifier "${c}" is not a valid modifier and was ignored. Data: ${JSON.stringify(e)}`),l.structure=t,l.value=n,l}return l}this._error.push(`Can't understand your data-type: ${n}. Please, find what is possible on https://github.com/PeterNaydenov/dt-toolbox`)},load:e=>e._select?s.loadLong(a.dependencies(),e):s.loadShort(a.dependencies(),e),preprocess(e,t,r){let{type:l="std"}={type:"std",modify:!1,...r},n=t(o.from(l).toFlat(a.dependencies(),e));return n?s.loadShort(a.dependencies(),n):(this._error.push('Method "preprocess" should always return a shortFlat data-type: [structure, value]'),a.init())},combine(e,t){const r=a.init(e,t);return s.combine({...a.dependencies()},this,r)},modify:e=>function(t,r){let l;return l=r?a.init(t,r):{structure:u(t.structure),value:{...t.value}},s.modify({...a.dependencies(),action:e},this,l)},errorLog(e){return e(this._error),this},replace(){const e=this,{result:t}=e._select;if(!t)return e;let[r,s]=o.from("midFlat").toFlat(a.dependencies(),t);return e.structure=u(r),e.value={...s},e._select.result=null,e},attach(e){const t=this,r={...a.dependencies(),location:e};let[l,n]=s.attach(r,t);return t.structure=u(l),t.value={...n},t._select.result=null,t},select(){return this._select={structure:[],value:[],result:null},this},find(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"root",t=arguments.length>1?arguments[1]:void 0;const r={...a.dependencies(),search:e,deep:t};return this._select.result=null,s.find(r,this)},parent(e,t){const r={...a.dependencies(),prop:e,where:t};return this._select.result=null,s.parent(r,this)},folder(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"root",t=arguments.length>1?arguments[1]:void 0;const r={...a.dependencies(),prop:e,where:t};return this._select.result=null,s.folder(r,this)},limit(e){return this._select.value=this._select.value.slice(0,e),this._select.result=null,this},keep(e){const t=this,r=l.toBreadcrumbKeys(t._select.value,t.structure);return void 0===e||(t._select.result=null,t._select.value=t._select.value.reduce(((s,l,n)=>{let o=r[n];return e(t.value[l],o,l)&&s.push(l),s}),[])),t},remove(e){const t=this,r=l.toBreadcrumbKeys(t._select.value,t.structure);return void 0===e||(t._select.result=null,t._select.value=t._select.value.reduce(((s,l,n)=>{let o=r[n];return e(t.value[l],o,l)||s.push(l),s}),[])),t},deep(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"less",r={...a.dependencies(),num:e,direction:t};return this._select.result=null,s.deep(r,this)},withData(){let e=this;return e._select.result=o.to("midFlat",a.dependencies(),[e.structure,e.value]),e},withSelection(){let e=this,{structure:t}=e._select;return e._select.result=o.to("midFlat",a.dependencies(),[t,l.extractSelection(e)]),e},flatten(){const e=this,{result:t}=e._select;return t?(e._select.result=n.flatten(t,{}),e):e},mix(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"root",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const r=this,{result:s}=r._select;return s?(r._select.result=n.mix(s,[...t,e]),r):r},reverse(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["root"];const t=this,{result:r}=t._select;return r?(t._select.result=n.reverse(r,e),t):t},keyPrefix(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=this,{result:r}=t._select;return r?(t._select.result=n.keyPrefix(r,{separationSymbol:e}),t):t},block:e=>function(){const t={...a.dependencies(),type:e};return this._select.result=null,s.block(t,this)},invert(){const e=this,t=e._select.value,r=Object.keys(e.value);return e._select.result=null,e._select.value=r.reduce(((e,r)=>(t.includes(r)||e.push(r),e)),[]),e},assemble(){const e={...a.dependencies()};return s.assemble(e,this)},purify(){const e={...a.dependencies()};return s.purify(e,this)},compare:e=>function(t,r){if(!t.hasOwnProperty("value")||!t.hasOwnProperty("structure"))return r(null),this;let s=this,l=o.to("breadcrumb",a.dependencies(),[s.structure,s.value]),n=o.to("breadcrumb",a.dependencies(),[t.structure,t.value]),u=c[e](l,n),[i,p]=o.from("breadcrumb").toFlat(a.dependencies(),u),d=a.dependencies().simpleDT();return d.structure=i,d.value=p,r(d),s},spread(e,t){const r=this,l=!!r._select.result,{help:n}=a.dependencies();let c,i,p;switch(e){case"value":case"values":if(i="values",l){let e=o.from("midFlat").toFlat(a.dependencies(),r._select.result);p=s.transform({...a.dependencies(),modify:i},e)}else p=s.transform({...a.dependencies(),modify:i},[r.structure,r.value]);c=o.to("std",a.dependencies(),p).map((e=>"string"==typeof e&&Number(e)||e));break;case"key":case"keys":if(i="keys",l){let e=o.from("midFlat").toFlat(a.dependencies(),r._select.result);p=s.transform({...a.dependencies(),modify:i},e),i="values",p=s.transform({...a.dependencies(),modify:i},p)}else p=s.transform({...a.dependencies(),modify:i},[r.structure,r.value]);c=o.to("std",a.dependencies(),p);break;case"standard":case"std":if(l){let e=o.from("midFlat").toFlat(a.dependencies(),r._select.result);c=o.to("std",a.dependencies(),e)}else c=o.to("std",a.dependencies(),[r._select.structure,n.extractSelection(r)]);break;case"breadcrumb":case"breadcrumbs":if(l){let e=o.from("midFlat").toFlat(a.dependencies(),r._select.result);c=o.to("breadcrumbs",a.dependencies(),e)}else c=o.to("breadcrumbs",a.dependencies(),[r._select.structure,n.extractSelection(r)]);break;case"tuple":case"tuples":if(l){let e=o.from("midFlat").toFlat(a.dependencies(),r._select.result);c=o.to("tuples",a.dependencies(),e)}else c=o.to("tuples",a.dependencies(),[r._select.structure,n.extractSelection(r)]);break;case"file":case"files":let e,t;if(l){let t=o.from("midFlat").toFlat(a.dependencies(),r._select.result);e=o.to("breadcrumbs",a.dependencies(),t)}else e=o.to("breadcrumbs",a.dependencies,[r._select.structure,n.extractSelection(r)]);t=n.reduceTuples(a.dependencies(),e),c=t.map((e=>{let[t,r]=e;return t?`${t}/${r}`:r}));break;case"midFlat":c=l?{...r._select.result}:o.to("midFlat",a.dependencies(),[r._select.structure,n.extractSelection(r)]);break;default:if(l)c=o.from("midFlat").toFlat(a.dependencies(),r._select.result);else{let e=n.extractSelection(r);c=[u(r._select.structure),e]}}return t?(t(c),r):c},spreadAll(e,t){return this.all(),this.spread(e,t)}},p={hi:()=>"hi"},d={init:a.init,load:a.load,loadFast:a.load,preprocess:a.preprocess,add:a.modify("add"),update:a.modify("update"),overwrite:a.modify("overwrite"),insert:a.modify("insert"),combine:a.combine,append:a.modify("append"),prepend:a.modify("prepend"),log:a.errorLog,empty:()=>Object.create(p),replace:a.replace,attach:a.attach,spread:a.spread,spreadAll:a.spreadAll,export:a.spread,exportAll:a.spreadAll,identical:a.compare("identical"),change:a.compare("change"),same:a.compare("same"),different:a.compare("different"),missing:a.compare("missing"),select:a.select,parent:a.parent,find:a.find,all:a.find,folder:a.folder,space:a.folder,deepObject:a.block("object"),deepArray:a.block("array"),invert:a.invert,assemble:a.assemble,purify:a.purify,limit:a.limit,keep:a.keep,remove:a.remove,deep:a.deep,withData:a.withData,withSelection:a.withSelection,flatten:a.flatten,mix:a.mix,keyPrefix:a.keyPrefix,reverse:a.reverse};e.exports=d},429:e=>{e.exports=function(e,t){for(const r in t)if(e[r])for(let s in t[r])e[r][s]||(e[r][s]=t[r][s]);else e[r]={...t[r]};return e}},57:e=>{e.exports=function(e,t){for(const r in t)if(e[r])for(let s in t[r])e[r][s]?e[r][s]+=t[r][s]:e[r][s]=t[r][s];return e}},785:e=>{function t(e){let t=0;for(k in e)!isNaN(parseInt(k))&&t++;return t}e.exports=function(e,r){let s=Object.keys(e),l=Object.keys(r),n=[...s],o={root:{}},c={};for(key of l)n.includes(key)||n.push(key);let u=n.sort(((e,t)=>t.split("/").length-e.split("/").length)).reduce(((t,s)=>{let l=e.root,n=r[s],o=s.split("/").pop();for(k in Object.keys(l),"root"!=s&&e[s]&&(t.add(o),c[o]||(c[o]=[]),c[o]=Object.keys(e[s]).reduce(((t,r)=>(t.push(e[s][r]),t)),c[o])),"root"!=o&&n&&(t.add(o),c[o]||(c[o]=[]),c[o]=Object.keys(n).reduce(((e,t)=>(e.push(n[t]),e)),c[o])),n)e[`root/${k}`]&&n[k]&&(t.add(k),c[k]||(c[k]=[]),c[k].push(n[k])),l[k]&&n[k]&&(t.add(k),c[k]?c[k].push(n[k]):c[k]=[l[k],n[k]]);return t}),new Set);for(k in s.forEach((t=>{let r=e[t];for(k in o[t]={},r)u.has(k)||(o[t][k]=r[k])})),l.forEach((e=>{let s=r[e],l=Object.keys(s),n=e.split("/").pop();u.has(n)||l.forEach((r=>{let l=`root/${r}`;if(o[l]){let e=t(o[l]);if("_fake$$$"===s[r])return;o[l][e]=s[r]}else if(!u.has(r)){if("_fake$$$"===s[r])return;o[e][r]=s[r]}}))})),c){const e=`root/${k}`;o[e]=c[k].reduce(((e,t,r)=>(e[r]=t,e)),{})}return o}},875:(e,t,r)=>{const s=r(785);e.exports=function(e){let t=Object.keys(e).filter((e=>"root"!=e)).reduce(((t,r)=>{let l={root:{...e[r]}};return s(t,l)}),{root:{...e.root}});return Object.keys(t).filter((e=>"root"!=e)).reduce(((e,r)=>{let s=r.split("/")[1],l="";for(prop in t[r])l&&(l+=";"),l+=t[r][prop];return e.root[s]=l,e}),{root:{...t.root}})}},631:(e,t,r)=>{const s=r(366),l=r(733),n={add:r(429),update:l,overwrite:s,insert:r(655),append:r(57),prepend:r(869),keyPrefix:r(432),flatten:r(875),combineShallow:r(785),mix:r(558),reverse:r(248)};e.exports=n},655:e=>{e.exports=function(e,t){for(const r in t){let s=Object.values(e[r]),l=Object.values(t[r]),n=s.concat(l);e[r]=n.reduce(((e,t,r)=>(e[r]=t,e)),{})}return e}},432:e=>{e.exports=function(e,t){let r=Object.keys(e),{separationSymbol:s}=t;return r.reduce(((t,r)=>{let l=r.substr(5).split("/").join(s);return t[r]={},Object.keys(e[r]).forEach((n=>{"root"==r?t[r][n]=e.root[n]:t[r][`${l}${s}${n}`]=e[r][n]})),t}),{})}},558:(e,t,r)=>{r(326);const s=r(785);e.exports=function(e,t){const r=t.pop();let l={};return l[r]={...e[r]},l.root||(l.root={...e.root}),t.reduce(((t,l)=>{let n={root:{...t[r]}},o={root:{...e[l]}};return t[r]=s(n,o).root,t}),l)}},366:e=>{e.exports=function(e,t){for(const r in t)if(e[r])for(let s in t[r])e[r][s]=t[r][s];else e[r]={...t[r]};return e}},869:e=>{e.exports=function(e,t){for(const r in t)if(e[r])for(let s in t[r]){const l=e[r][s];e[r][s]=l?t[r][s]+l:t[r][s]}return e}},248:e=>{e.exports=function(e,t){let r={...e};for(const e of t)if(r[e]){let t={...r[e]},s=Object.keys(t);r[e]={},s.forEach((s=>{let l=t[s];r[e][l]=s}))}return r}},733:e=>{e.exports=function(e,t){for(const r in t)if(e.hasOwnProperty(r))for(let s in t[r])e[r].hasOwnProperty(s)&&(e[r][s]=t[r][s]);return e}}},t={},r=function r(s){var l=t[s];if(void 0!==l)return l.exports;var n=t[s]={exports:{}};return e[s](n,n.exports,r),n.exports}(880);dtbox=r})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dt-toolbox",
3
- "version": "4.0.4",
3
+ "version": "4.0.7",
4
4
  "description": "Data manipulation tool",
5
5
  "main": "src/main.js",
6
6
  "scripts": {
@@ -11,15 +11,18 @@
11
11
  "directories": {
12
12
  "test": "test"
13
13
  },
14
+ "dependencies": {
15
+ "@peter.naydenov/walk": "1.1.0"
16
+ },
14
17
  "devDependencies": {
15
- "@babel/core": "7.17.5",
16
- "@babel/preset-env": "7.16.11",
17
- "babel-loader": "8.2.3",
18
+ "@babel/core": "7.18.2",
19
+ "@babel/preset-env": "7.18.2",
20
+ "babel-loader": "8.2.5",
18
21
  "chai": "4.3.6",
19
- "mocha": "9.2.1",
22
+ "mocha": "10.0.0",
20
23
  "nyc": "15.1.0",
21
24
  "uglifyjs-webpack-plugin": "2.2.0",
22
- "webpack": "5.69.1",
25
+ "webpack": "5.72.1",
23
26
  "webpack-cli": "4.9.2"
24
27
  },
25
28
  "repository": {
@@ -39,7 +39,8 @@ function toFlat ( dependencies, rawValue ) {
39
39
  , structRaw = [] // objectLocation strings
40
40
  , propDone = []
41
41
  ;
42
- keyList.forEach ( (keyArr) => { // Setup our temp structures: tProps and structRaw
42
+
43
+ keyList.forEach ( keyArr => { // Setup our temp structures: tProps and structRaw
43
44
  keyArr.forEach ( (k,i) => {
44
45
  let parent = keyArr.slice( 0, i ).join ( '/' );
45
46
  if ( !parent ) return
@@ -24,8 +24,7 @@ const selectConvertorFrom =
24
24
  return std.toFlat ( dependencies, inData )
25
25
  case 'tuple' :
26
26
  case 'tuples' :
27
-
28
- break
27
+ inData = help.tuplesToBradcrumbs ( dependencies, inData )
29
28
  case 'breadcrumb' :
30
29
  case 'breadcrumbs' :
31
30
  rawKeys = Object.keys ( inData )
@@ -62,12 +61,17 @@ function from ( type ) { // convert from something to flat...
62
61
 
63
62
 
64
63
  function to ( type, dependencies, inData ) { // convert from flat to 'data-type'...
64
+ const { help } = dependencies;
65
65
  switch ( type ) {
66
66
  case 'std' :
67
67
  case 'standard':
68
68
  return std.toType ( dependencies, inData )
69
69
  case 'midFlat' :
70
70
  return midFlat.toType ( dependencies, inData )
71
+ case 'tuple':
72
+ case 'tuples':
73
+ let breadData = breadcrumbs.toType ( dependencies, inData )
74
+ return help.reduceTuples ( dependencies, breadData )
71
75
  case 'breadcrumb' :
72
76
  case 'breadcrumbs':
73
77
  return breadcrumbs.toType ( dependencies,inData )
@@ -57,12 +57,17 @@ function toFlat ( dependencies, d ) { // Converts data to shortFlat
57
57
 
58
58
  const flatList = tProps[path];
59
59
  if ( !flatList ) return
60
+
61
+ let
62
+ flat = Array.from(flatList)
63
+ , isArray = help.hasNumbers ( flat )
64
+ ;
65
+ if ( isArray ) structure[i][0] = 'array'
66
+
60
67
  flatList.forEach ( name => {
61
- let flat = Array.from ( flatList );
62
68
  position = structure.length
63
- let type = help.hasNumbers (flat) ? 'array' : 'object';
64
69
  propDone[position] = `${path}/${name}`
65
- structure.push ( [type , position])
70
+ structure.push ( ['object' , position])
66
71
  })
67
72
  })
68
73
 
@@ -80,13 +85,13 @@ function toFlat ( dependencies, d ) { // Converts data to shortFlat
80
85
 
81
86
  let ix = propDone.indexOf (breadcrumbs);
82
87
  if ( ix >= 0 ) structure[ix].push ( [i, kProp] )
83
-
84
88
  if ( isArray ) structure[i][0] = 'array'
85
- else structure[i][0] = 'object'
86
89
 
87
90
  propDone [i] = k
88
91
  for (let el in d[k] ) {
89
- value [`root/${i}/${el}` ] = d[k][el]
92
+ let val = d[k][el];
93
+ if ( val === '_fake$$$' ) return // Remove fake data generated from 'toType' function
94
+ value [`root/${i}/${el}` ] = val
90
95
  }
91
96
  }) // keys foreach
92
97
  return [ structure, value ]
@@ -116,14 +121,27 @@ function toType ( dependencies, [structure, value] ) { // Converts data to mid
116
121
  keys [ objNumber ] = midKey
117
122
  })
118
123
  })
119
- let valueKeys = Object.keys ( value );
124
+ let
125
+ valueKeys = Object.keys ( value )
126
+ , valueCheck = new Set ()
127
+ ;
120
128
  for (let k of valueKeys ) { // Organize values per midFlat object
121
129
  let
122
130
  [ , n ,prop ] = k.split ( '/' )
123
131
  , midKey = keys[n]
124
132
  ;
133
+ valueCheck.add(n)
125
134
  result[midKey][prop] = value[k]
126
135
  }
136
+ structure.forEach ( row => { // Set a fake value into array objects. Preserve 'array' during midflat operations
137
+ let
138
+ [ type, n, ...objects ] = row
139
+ , midKey = keys [ n ]
140
+ , noValue = !valueCheck.has(n.toString())
141
+ , hasNoObjects = !( objects.length > 0 )
142
+ ;
143
+ if ( type === 'array' && noValue && hasNoObjects ) result[midKey]['-1'] = '_fake$$$'
144
+ })
127
145
  return result
128
146
  } // toType func.
129
147
 
@@ -4,29 +4,42 @@
4
4
 
5
5
  function toFlat ( dependencies, d ) {
6
6
  let
7
- deepList = []
8
- , isPrimitve = false
9
- , value = dependencies.empty ()
10
- , {
11
- findType
12
- , isItPrimitive
13
- , generateList
14
- } = dependencies.help
7
+ value = dependencies.empty ()
8
+ , { help, walk } = dependencies
9
+ , { findType } = help
15
10
  , structure = []
16
- ;
17
- deepList.push ( generateList (0, d) )
18
- structure.push ([ findType(d), 0 ])
19
- for ( let list of deepList ) {
20
- for ( let [id, k,val ] of list ) {
21
- isPrimitve = isItPrimitive ( val )
22
- if ( isPrimitve ) value [`root/${id}/${k}`] = val
23
- else {
24
- let j = structure.length;
25
- structure[id].push ([j,k])
26
- deepList.push ( generateList(j,val) )
27
- structure.push ([ findType(val), j])
28
- }
29
- }}
11
+ , objectCounter = 0
12
+ , currentObjectID = 0 // In use for values in keyCalls function
13
+ , objectIndex = {} // Map breadcrumb -> structure row number
14
+ ;
15
+
16
+ function objectCalls (obj, breadcrumbs ) {
17
+ let
18
+ location = breadcrumbs.split ( '/' )
19
+ , objectName = location.pop()
20
+ ;
21
+
22
+ structure.push ( [findType(obj), objectCounter])
23
+ objectIndex[breadcrumbs] = objectCounter
24
+ currentObjectID = objectCounter
25
+
26
+ if ( location.length > 0 ) {
27
+ let
28
+ hostName = location.join ( '/' )
29
+ , hostID = objectIndex[hostName]
30
+ ;
31
+ structure[hostID].push ([objectCounter, objectName])
32
+ }
33
+ objectCounter++
34
+ return obj
35
+ } // objectCalls func.
36
+
37
+ function keyCalls ( v,k,breadcrumbs ) {
38
+ value[`root/${currentObjectID}/${k}`] = v
39
+ return v
40
+ } // keyCalls func.
41
+
42
+ walk ( d, [keyCalls, objectCalls])
30
43
  return [ structure, value ]
31
44
  } // getFlat func.
32
45
 
package/src/help/index.js CHANGED
@@ -1,19 +1,17 @@
1
1
  'use strict'
2
2
 
3
3
  const
4
- isItPrimitive = require ( './isItPrimitive' )
5
- , hasNumbers = require ( './hasNumbers' )
6
- , generateList = require ( './generateList' )
7
- , generateObject = require ( './generateObject' )
8
- , sanitizeFlatKeys = require ( './sanitizeFlatKeys' )
9
- , copyStructure = require ( './copyStructure' )
10
- , objectsByLevel = require ( './objectsByLevel' )
11
- , filterObject = require ( './filterObject' )
12
- , toBreadcrumbKeys = require ( './toBreadcrumbsKeys' )
13
- , updateSelection = require ( './updateSelection' )
14
- , zipObject = require ( './zipObject' )
15
- , extractSelection = require ( './extractSelection' )
16
- , reduceTuples = require ( './reduceTuples' )
4
+ isItPrimitive = require ( './isItPrimitive' )
5
+ , hasNumbers = require ( './hasNumbers' )
6
+ , sanitizeFlatKeys = require ( './sanitizeFlatKeys' )
7
+ , objectsByLevel = require ( './objectsByLevel' )
8
+ , filterObject = require ( './filterObject' )
9
+ , toBreadcrumbKeys = require ( './toBreadcrumbsKeys' )
10
+ , updateSelection = require ( './updateSelection' )
11
+ , zipObject = require ( './zipObject' )
12
+ , extractSelection = require ( './extractSelection' )
13
+ , reduceTuples = require ( './reduceTuples' )
14
+ , tuplesToBradcrumbs = require ( './tuplesToBreadcrumbs' )
17
15
  ;
18
16
 
19
17
  const findType = d => ( d instanceof Array ) ? 'array' : 'object'
@@ -24,10 +22,7 @@ module.exports = {
24
22
  findType // Is it array or object. Returns strings: 'array' | 'object'
25
23
  , hasNumbers // Check if array contain number members. Returns boolean
26
24
  , isItPrimitive // Returns boolean
27
- , generateObject
28
- , generateList
29
25
  , sanitizeFlatKeys // Sanitize 'file' format keys
30
- , copyStructure // Creates a structure copy. Immutability matters
31
26
  , objectsByLevel // Object IDs organized by levels
32
27
  , filterObject // Find object and object props in a value
33
28
  , toBreadcrumbKeys // Breadcrumbs keys
@@ -35,6 +30,7 @@ module.exports = {
35
30
  , zipObject // Conect two arrays in a single object
36
31
  , extractSelection // Creates 'value' object with selected keys only
37
32
  , reduceTuples
33
+ , tuplesToBradcrumbs
38
34
  }
39
35
 
40
36
 
@@ -1,17 +1,21 @@
1
- function reduceTuples ( dependencies, breadcrumbData ) {
2
- const { help } = dependencies;
3
- let tupleKeys = Object.keys ( breadcrumbData );
1
+ 'use strict'
4
2
 
5
- return tupleKeys.reduce ( (res,k) => {
6
- let
7
- arr = k.substr(5).split('/')
8
- , ln = arr.length
9
- , lastEl = arr[ln-1]
10
- ;
11
- if ( help.hasNumbers([lastEl]) ) arr.pop ()
12
- res.push ( [ arr.join('/'), breadcrumbData[k]])
13
- return res
14
- },[])
3
+ function reduceTuples ( dependencies, breadcrumbData ) {
4
+ // *** Converts breadcrumbs to array of tuples
5
+ const
6
+ { help, walk } = dependencies
7
+ , result = []
8
+ ;
9
+ walk ( breadcrumbData, ( v, k ) => {
10
+ let
11
+ arr = k.substr(5).split('/')
12
+ , ln = arr.length
13
+ , lastEl = arr[ln-1]
14
+ ;
15
+ if ( help.hasNumbers([lastEl]) ) arr.pop ()
16
+ result.push ( [ arr.join('/'), v])
17
+ })
18
+ return result
15
19
  } // reduceTuples func.
16
20
 
17
21
 
@@ -0,0 +1,22 @@
1
+ 'use strict'
2
+
3
+ function tuplesToBreadcrumbs ( dependencies, data ) {
4
+ const { walk } = dependencies;
5
+ let result = {};
6
+
7
+ function objectCalls (obj, breadcrumbs ) {
8
+ if ( breadcrumbs === 'root' ) return obj; // ignore root object
9
+ let [ key, val ] = obj;
10
+ result[key] = val
11
+ return obj
12
+ } // objectCalls func.
13
+
14
+ walk ( data, [null,objectCalls])
15
+ return result
16
+ } // tuplesToBradcrumbs func.
17
+
18
+
19
+
20
+ module.exports = tuplesToBreadcrumbs
21
+
22
+
package/src/lib/attach.js CHANGED
@@ -4,7 +4,6 @@ function attach ( dependencies, me ) {
4
4
  , mainData = convert.to ( 'midFlat', dependencies, [ me.structure, me.value ] )
5
5
  , { result } = me._select
6
6
  ;
7
-
8
7
  if ( !result ) return me
9
8
  for ( k in result ) {
10
9
  newKey = k.replace ( 'root', location )
@@ -1,7 +1,7 @@
1
1
  function combine ( dependencies, main, addData ) {
2
2
  // *** Modify combine
3
3
  const
4
- { convert, help, modifier } = dependencies
4
+ { convert, modifier, walk } = dependencies
5
5
  , mainData = convert.to ( 'midFlat', dependencies, [main.structure, main.value])
6
6
  , update = convert.to ( 'midFlat', dependencies, [addData.structure, addData.value] )
7
7
  , keyList = Object.keys ( update )
@@ -26,7 +26,7 @@ function combine ( dependencies, main, addData ) {
26
26
  else return modifier['combineShallow'] ( res, { root: {...update[k]}} )
27
27
  }, mainData )
28
28
  let [structure, value ] = convert.from ( 'midFlat').toFlat ( dependencies, result )
29
- main.structure = help.copyStructure ( structure )
29
+ main.structure = walk ( structure )
30
30
  main.value = value
31
31
  return main
32
32
  } // combine func.
package/src/lib/find.js CHANGED
@@ -5,7 +5,7 @@ function find ( dependencies, me ) {
5
5
  , deepDefault = 9999
6
6
  , deepMax
7
7
  , keys = Object.keys ( me.value )
8
- , { help, deep, search } = dependencies
8
+ , { help, deep, search, walk } = dependencies
9
9
  , longKeys = help.toBreadcrumbKeys ( keys, me.structure )
10
10
  ;
11
11
 
@@ -25,7 +25,7 @@ function find ( dependencies, me ) {
25
25
  return res
26
26
  },[] )
27
27
  me._select.value = help.updateSelection ( me._select.value, collection )
28
- me._select.structure = help.copyStructure ( me.structure )
28
+ me._select.structure = walk ( me.structure )
29
29
  return me
30
30
  } // find func.
31
31
 
package/src/lib/folder.js CHANGED
@@ -1,12 +1,11 @@
1
1
  function folder ( dependencies, me ) {
2
- const { help, prop, where } = dependencies;
2
+ const { help, prop, walk, where } = dependencies;
3
3
  let
4
4
  usedNumbers = []
5
5
  , selectedKeys = []
6
6
  , result = []
7
7
  ;
8
8
  if ( prop == 'root' ) usedNumbers.push ( 0 )
9
-
10
9
  me.structure.forEach ( row => { // Find if structures
11
10
  row.forEach ( (item,i) => {
12
11
  if ( i > 1 ) {
@@ -32,7 +31,7 @@ function folder ( dependencies, me ) {
32
31
  } // if where
33
32
  else result = selectedKeys
34
33
  me._select.value = help.updateSelection ( me._select.value, result )
35
- me._select.structure = help.copyStructure ( me.structure )
34
+ me._select.structure = walk ( me.structure )
36
35
  return me
37
36
  } // folder func.
38
37
 
package/src/lib/index.js CHANGED
@@ -29,9 +29,9 @@ const dtlib = {
29
29
  } // loadShort func.
30
30
 
31
31
  , _loadData ( dependencies, structure, value ) {
32
- const { help, simpleDT } = dependencies;
32
+ const { simpleDT, walk } = dependencies;
33
33
  let res = simpleDT ();
34
- res.structure = help.copyStructure ( structure )
34
+ res.structure = walk ( structure )
35
35
  for ( const k in value ) {
36
36
  res.value[k] = value[k]
37
37
  }
package/src/lib/modify.js CHANGED
@@ -1,17 +1,16 @@
1
1
  function modify ( dependencies, main, addData ) {
2
2
  // *** Modify add | update | overwrite | insert | append | prepend | combine
3
3
  const
4
- { action, convert, help, modifier } = dependencies
4
+ { action, convert, modifier, walk } = dependencies
5
5
  , mainData = convert.to ( 'midFlat', dependencies, [main.structure, main.value])
6
6
  , update = convert.to ( 'midFlat', dependencies, [addData.structure, addData.value] )
7
7
  ;
8
-
9
8
  let result;
10
9
  main._error = main._error.concat ( addData._error )
11
10
  result = modifier[action] ( mainData, update )
12
11
 
13
12
  let [structure, value ] = convert.from ( 'midFlat').toFlat ( dependencies, result )
14
- main.structure = help.copyStructure ( structure )
13
+ main.structure = walk ( structure )
15
14
  main.value = value
16
15
  return main
17
16
  } // modify func.
package/src/lib/parent.js CHANGED
@@ -1,5 +1,5 @@
1
1
  function parent ( dependencies, me ) {
2
- const { help, prop, where } = dependencies;
2
+ const { help, prop, walk, where } = dependencies;
3
3
  let
4
4
  usedNumbers = []
5
5
  , selectedKeys = []
@@ -9,24 +9,24 @@ function parent ( dependencies, me ) {
9
9
  let splited = key.split('/');
10
10
  if ( splited[2] == prop ) usedNumbers.push ( splited[1] )
11
11
  }
12
- me.structure.forEach ( row => { // Find if any array structures
13
- row.forEach ( (item,i) => {
14
- if ( i > 1 && item[1]==prop ) {
15
- let
16
- id = item[0]
17
- , objectType = me.structure[id][0]
18
- ;
19
- if ( objectType == 'array' ) usedNumbers.push(id)
20
- }
21
- })
22
- })
23
- selectedKeys = usedNumbers.reduce ( (res,number) => { // Collect props of used parent objects
12
+ function findUsedNumbers (obj, breadcrumbs ) {
13
+ if ( breadcrumbs === 'root' ) return obj // Ignore top object
14
+ let isRow = typeof obj[0] == 'string'; // Ignore row objects
15
+ if ( isRow ) return obj
16
+ let [ location, name ] = obj; // Here are only property descriptions
17
+ if ( name === prop ) usedNumbers.push ( location )
18
+ return null
19
+ }
20
+ walk ( me.structure,[null, findUsedNumbers])
21
+
22
+ selectedKeys = usedNumbers.reduce ( (res,location) => { // Collect props of used parent objects
24
23
  for (let key in me.value ) {
25
- let splited = key.split('/');
26
- if ( splited[1] == number ) res.push ( key )
24
+ let objectID = key.split('/')[1];
25
+ if ( objectID == location ) res.push ( key )
27
26
  }
28
27
  return res
29
28
  },[] )
29
+
30
30
  if ( where ) { // Apply where fn if is defined
31
31
  result = usedNumbers.reduce ( (res, number) => {
32
32
  let [localObject, localKeysSelection] = help.filterObject ( number, selectedKeys, me.value )
@@ -37,7 +37,7 @@ function parent ( dependencies, me ) {
37
37
  } // if where
38
38
  else result = selectedKeys
39
39
  me._select.value = help.updateSelection ( me._select.value, result )
40
- me._select.structure = help.copyStructure ( me.structure )
40
+ me._select.structure = walk ( me.structure )
41
41
  return me
42
42
  } // parent func.
43
43
 
package/src/main.js CHANGED
@@ -5,7 +5,7 @@
5
5
  DT object & DT Toolbox
6
6
  =======================
7
7
 
8
- Version 3.0.0
8
+ Version 4.0.7
9
9
 
10
10
  History notes:
11
11
  - Idea was born on March 17th, 2016.
@@ -22,6 +22,7 @@
22
22
  * Old internal data-type have a new name(breadcrumbs) and is fully supported(import/export);
23
23
  * Support for tuples(import and export);
24
24
  * Complete code refactoring;
25
+
25
26
  */
26
27
 
27
28
 
@@ -32,6 +33,7 @@ const
32
33
  , modifier = require ( './modifiers/index' )
33
34
  , convert = require ( './convertors/index' )
34
35
  , compareMethod = require ( './compareMethod/index' )
36
+ , walk = require ( '@peter.naydenov/walk' )
35
37
 
36
38
  , INIT_DATA_TYPES = [
37
39
  'std', 'standard'
@@ -67,6 +69,7 @@ const mainlib = {
67
69
  , convert
68
70
  , help
69
71
  , modifier
72
+ , walk
70
73
  }
71
74
  } // dependencies func.
72
75
 
@@ -100,7 +103,7 @@ const mainlib = {
100
103
  if ( inData != null ) {
101
104
  // Note: Use method 'load' instead of 'init' if your data is 'flat'
102
105
  const [structure, value] = ( type == 'flat' || type == 'shortFlat' ) ? inData : convert.from(type).toFlat ( dependencies, inData )
103
- dt.structure = help.copyStructure ( structure )
106
+ dt.structure = walk ( structure )
104
107
  dt.value = value
105
108
  }
106
109
  if ( !modify ) return dt
@@ -162,7 +165,7 @@ const mainlib = {
162
165
 
163
166
  if ( options ) updateData = mainlib.init ( inData, options )
164
167
  else updateData = {
165
- structure : help.copyStructure(inData.structure)
168
+ structure : walk ( inData.structure )
166
169
  , value : {...inData.value }
167
170
  }
168
171
  return dtlib.modify ( { ...mainlib.dependencies(), action:method}, me, updateData )
@@ -170,8 +173,6 @@ const mainlib = {
170
173
 
171
174
 
172
175
 
173
-
174
-
175
176
  , errorLog ( callback ) { // Executes callback with errors as argument
176
177
  callback ( this._error )
177
178
  return this
@@ -187,7 +188,7 @@ const mainlib = {
187
188
  ;
188
189
  if ( !result ) return me
189
190
  let [struct, val] = convert.from ( 'midFlat').toFlat ( mainlib.dependencies(), result )
190
- me.structure = help.copyStructure ( struct )
191
+ me.structure = walk ( struct )
191
192
  me.value = {...val}
192
193
  me._select.result = null
193
194
  return me
@@ -203,7 +204,7 @@ const mainlib = {
203
204
  , dependencies = { ...mainlib.dependencies(), location }
204
205
  ;
205
206
  let [structure, value ] = dtlib.attach ( dependencies, me )
206
- me.structure = help.copyStructure ( structure )
207
+ me.structure = walk ( structure )
207
208
  me.value = {...value}
208
209
  me._select.result = null
209
210
  return me
@@ -438,6 +439,8 @@ const mainlib = {
438
439
 
439
440
 
440
441
 
442
+
443
+
441
444
  , purify () {
442
445
  const
443
446
  me = this
@@ -563,16 +566,15 @@ const mainlib = {
563
566
  selection = convert.to ( 'breadcrumbs', mainlib.dependencies(), [me._select.structure, help.extractSelection(me)])
564
567
  }
565
568
  break
569
+ case 'tuple' :
566
570
  case 'tuples' :
567
- let tupleData;
568
571
  if ( hasSelection ) {
569
572
  let tupSelect = convert.from ( 'midFlat' ).toFlat ( mainlib.dependencies(), me._select.result );
570
- tupleData = convert.to ( 'breadcrumbs', mainlib.dependencies(), tupSelect )
573
+ selection = convert.to ( 'tuples', mainlib.dependencies(), tupSelect )
571
574
  }
572
575
  else {
573
- tupleData = convert.to ( 'breadcrumbs', mainlib.dependencies(), [me._select.structure, help.extractSelection(me)]);
576
+ selection = convert.to ( 'tuples', mainlib.dependencies(), [me._select.structure, help.extractSelection(me)]);
574
577
  }
575
- selection = help.reduceTuples ( mainlib.dependencies(), tupleData )
576
578
  break
577
579
  case 'file' :
578
580
  case 'files' :
@@ -605,7 +607,7 @@ const mainlib = {
605
607
  else {
606
608
  let
607
609
  set = help.extractSelection ( me )
608
- , struct = help.copyStructure ( me._select.structure )
610
+ , struct = walk ( me._select.structure )
609
611
  ;
610
612
  selection = [ struct, set ]
611
613
  }
@@ -64,7 +64,6 @@ function combineShallow ( mainData, update ) {
64
64
  }
65
65
  }) // forEach mainKeys
66
66
 
67
-
68
67
  updateKeys.forEach ( key => {
69
68
  let
70
69
  obj = update[key]
@@ -76,10 +75,14 @@ function combineShallow ( mainData, update ) {
76
75
  let testKey = `root/${k}`;
77
76
  if ( result[testKey] ) {
78
77
  let digitCount = _findDigitKeys ( result[testKey]);
78
+ if ( obj[k] === '_fake$$$' ) return
79
79
  result[testKey][digitCount] = obj[k]
80
80
  return
81
81
  }
82
- if ( !duplicateNames.has(k) ) result[key][k] = obj[k]
82
+ if ( !duplicateNames.has(k) ) {
83
+ if ( obj[k] === '_fake$$$' ) return
84
+ result[key][k] = obj[k]
85
+ }
83
86
  })
84
87
  }) // forEach updateKeys
85
88
 
@@ -5,10 +5,10 @@ const
5
5
 
6
6
 
7
7
  function flatten ( mainData ) {
8
+
8
9
  let keyList = Object
9
10
  .keys ( mainData )
10
11
  .filter ( x => x != 'root' );
11
-
12
12
  let flatter = keyList.reduce ( (res,k) => {
13
13
  let update = { 'root': {...mainData[k]} }
14
14
  return combineShallow ( res, update )
package/src/simple.js CHANGED
@@ -17,7 +17,6 @@ const simple = { // * Simple instruments
17
17
 
18
18
 
19
19
  , isObject : str => !simple.notObject(str)
20
- , copy : obj => JSON.parse ( JSON.stringify(obj) )
21
20
  , folderKind : test => test instanceof Array ? 'array' : 'object'
22
21
  , getIterator : list => Object.keys ( list )
23
22
 
@@ -1,156 +0,0 @@
1
- 'use strict'
2
-
3
-
4
-
5
- function toFlat ( dependencies, d ) {
6
- let
7
- deepList = []
8
- , isPrimitve = false
9
- , result = dependencies.empty ()
10
- ;
11
- deepList.push ( generateList (`root`, d) )
12
- for ( let list of deepList ) {
13
- for ( let [k,val] of list ) {
14
- isPrimitve = isItPrimitive ( val )
15
- if ( isPrimitve ) result [k] = val
16
- else deepList.push ( generateList(k,val) )
17
- }}
18
- return result
19
- } // getFlat func.
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
- function toFormat ( flat ) {
31
- let
32
- flatKeys = Object.keys ( flat ).sort ((a,b) => b.split('/').length-a.split('/').length)
33
- , flatKeyArr = flatKeys.map ( x => x.split('/') )
34
- , maxLenght = flatKeyArr[0].length - 1
35
- , ls = [] // Level definitions generators
36
- , resultObjects = {} // Objects ready to build
37
- ;
38
-
39
- for ( let i=maxLenght; i >= 0; i-- ) { // organize keys by deepLevels
40
- let selectedKeys = flatKeyArr.filter ( x => x.length == i + 1 );
41
- ls.push ( generateObject (selectedKeys) )
42
- }
43
- for ( let deepLevel in ls ) { // createObjects
44
- const level = ls[deepLevel].next().value;
45
- for (let k in level ) {
46
- let type = defineStructure ( level[k] ); // object | array
47
- resultObjects[k] = ( type == 'array' ) ? [] : {}
48
- level[k].forEach ( key => {
49
- let combinedK = `${k}/${key}`
50
- if ( type == 'array' ) resultObjects[k].push ( flat[combinedK] )
51
- else resultObjects[k][key] = flat[combinedK]
52
- })
53
- } // for level
54
- } // for ls
55
-
56
- let
57
- gLevelList = generateLevelList ( maxLenght, resultObjects )
58
- , levels = [...gLevelList.next().value ]
59
- ;
60
- levels.forEach ( level => {
61
- level.forEach ( item => {
62
- let param = item.split ( '/' )
63
- , k = param.pop()
64
- , selected
65
- , combinedK
66
- ;
67
-
68
- if ( param.length == 0 ) return
69
- else {
70
- selected = param.join('/')
71
- combinedK = `${selected}/${k}`
72
- }
73
- resultObjects [selected][k] = resultObjects[combinedK]
74
- })
75
- })
76
- return resultObjects['root']
77
- } // getStandard func.
78
-
79
-
80
-
81
- function sanitizeFlat ( obj ) {
82
- return Object.keys(obj).reduce ( (r,k) => {
83
- let newK = k;
84
- if ( !k.includes('root/') ) newK = `root/${k}`
85
- r [newK] = obj[k]
86
- return r
87
- },{})
88
- } // sanitizeFlat func.
89
-
90
-
91
- function defineStructure ( keyNames ) {
92
- let num = false;
93
- keyNames.forEach ( key => {
94
- let test = /^[0-9]+$/ ;
95
- if ( key.match(test) ) num = true
96
- })
97
- return num ? 'array' : 'object'
98
- } // defineStructure func.
99
-
100
-
101
-
102
- function isItPrimitive (d) {
103
- if ( typeof d == 'function' ) return false
104
- return ( typeof d != 'object' ) ? true : false
105
- } // isItPrimitive func.
106
-
107
-
108
-
109
- function* generateList ( kPrefix, val) {
110
- for ( let k in val ) {
111
- yield [ `${kPrefix}/${k}`, val[k] ]
112
- }
113
- } // generateList func*.
114
-
115
-
116
-
117
- function* generateObject ( kList ) {
118
- let
119
- places = {}
120
- , usedObjKeys = new Set()
121
- ;
122
- for ( let el of kList ) {
123
- let
124
- key = el.pop()
125
- , objKey = el.join('/')
126
- ;
127
- if ( usedObjKeys.has(objKey) ) {
128
- places[objKey].push ( key )
129
- }
130
- else {
131
- usedObjKeys.add ( objKey )
132
- places[objKey] = []
133
- places[objKey].push ( key )
134
- }
135
- } // for kList
136
- yield places
137
- } // generateObj
138
-
139
-
140
-
141
- function* generateLevelList ( max, object ) {
142
- let result = []
143
- for ( let i=0; i <= max; i++ ) {
144
- let keyList = Object.keys ( object ).filter ( k=> k.split('/').length==i );
145
- if ( keyList.length > 0 ) result.push ( keyList )
146
- }
147
- yield result
148
- } // generateParamList func*.
149
-
150
-
151
-
152
-
153
-
154
- module.exports = { toFlat, toFormat }
155
-
156
-
@@ -1,15 +0,0 @@
1
- function copyStructure ( structure ) {
2
- // *** Returns copy of the structure and preserve immutability
3
- let result = []
4
- structure.forEach ( (row,i) => {
5
- result.push ( [] )
6
- row.forEach ( item => result[i].push ( item ) )
7
- })
8
- return result
9
- } // copyStructure func.
10
-
11
-
12
-
13
- module.exports = copyStructure
14
-
15
-
@@ -1,13 +0,0 @@
1
- function* generateList ( id, value) {
2
- // *** Generates array description for every property of object 'value'.
3
- for ( let key in value ) {
4
- yield [ id, key, value[key] ]
5
- }
6
- } // generateList func*.
7
-
8
-
9
-
10
- module.exports = generateList
11
-
12
-
13
-
@@ -1,27 +0,0 @@
1
- function* generateObject ( kList ) {
2
- let
3
- places = {}
4
- , usedObjKeys = new Set()
5
- ;
6
- for ( let el of kList ) {
7
- let
8
- prop = el.pop ()
9
- , key = el.join('/')
10
- ;
11
- if ( usedObjKeys.has(key) ) {
12
- places[key].push ( prop )
13
- }
14
- else {
15
- usedObjKeys.add ( key )
16
- places[key] = []
17
- places[key].push ( prop )
18
- }
19
- } // for kList
20
- yield places
21
- } // generateObject func*.
22
-
23
-
24
-
25
- module.exports = generateObject
26
-
27
-