dt-toolbox 4.0.9 → 6.0.0
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 +7 -12
- package/LICENSE +1 -1
- package/Migration.guide.md +14 -1
- package/README.md +976 -352
- package/README_v.2.x.x.md +0 -1
- package/README_v.4.x.x.md +532 -0
- package/package.json +24 -32
- package/src/convertors/index.js +44 -37
- package/src/convertors/midflat.js +77 -133
- package/src/convertors/standard.js +62 -87
- package/src/convertors/tuples.js +171 -0
- package/src/flatData/connect.js +50 -0
- package/src/flatData/export.js +46 -0
- package/src/flatData/filters/list.js +11 -0
- package/src/flatData/filters/listObject.js +13 -0
- package/src/flatData/filters/object.js +12 -0
- package/src/flatData/filters/root.js +12 -0
- package/src/flatData/find.js +20 -0
- package/src/flatData/from.js +33 -0
- package/src/flatData/get.js +29 -0
- package/src/flatData/index.js +101 -0
- package/src/flatData/insert.js +24 -0
- package/src/flatData/like.js +24 -0
- package/src/flatData/look.js +49 -0
- package/src/flatData/push.js +19 -0
- package/src/flatData/save.js +17 -0
- package/src/flatData/set.js +26 -0
- package/src/flatData/setupFilter.js +21 -0
- package/src/flatData/use.js +16 -0
- package/src/flatObject/copy.js +19 -0
- package/src/flatObject/export.js +13 -0
- package/src/flatObject/index.js +47 -0
- package/src/flatObject/insert.js +28 -0
- package/src/flatObject/model.js +32 -0
- package/src/flatObject/query.js +24 -0
- package/src/flatObject/setupFilter.js +12 -0
- package/src/main.js +21 -690
- package/src/mainLib.js +105 -0
- package/dist/dt-toolbox.min.js +0 -1
- package/dist/index.html +0 -65
- package/src/compareMethod/change.js +0 -21
- package/src/compareMethod/different.js +0 -18
- package/src/compareMethod/identical.js +0 -21
- package/src/compareMethod/index.js +0 -16
- package/src/compareMethod/missing.js +0 -18
- package/src/compareMethod/same.js +0 -18
- package/src/convertors/breadcrumbs.js +0 -148
- package/src/help/extractSelection.js +0 -12
- package/src/help/filterObject.js +0 -25
- package/src/help/hasNumbers.js +0 -14
- package/src/help/index.js +0 -37
- package/src/help/isItPrimitive.js +0 -10
- package/src/help/objectsByLevel.js +0 -16
- package/src/help/reduceTuples.js +0 -29
- package/src/help/sanitizeFlatKeys.js +0 -30
- package/src/help/toBreadcrumbsKeys.js +0 -28
- package/src/help/tuplesToBreadcrumbs.js +0 -25
- package/src/help/updateSelection.js +0 -14
- package/src/help/zipObject.js +0 -24
- package/src/lib/assemble.js +0 -45
- package/src/lib/attach.js +0 -20
- package/src/lib/block.js +0 -33
- package/src/lib/combine.js +0 -38
- package/src/lib/deep.js +0 -23
- package/src/lib/find.js +0 -36
- package/src/lib/folder.js +0 -42
- package/src/lib/index.js +0 -58
- package/src/lib/modify.js +0 -22
- package/src/lib/parent.js +0 -51
- package/src/lib/purify.js +0 -39
- package/src/lib/transform.js +0 -55
- package/src/modifiers/add.js +0 -18
- package/src/modifiers/append.js +0 -18
- package/src/modifiers/combineShallow.js +0 -119
- package/src/modifiers/flatten.js +0 -39
- package/src/modifiers/index.js +0 -34
- package/src/modifiers/insert.js +0 -21
- package/src/modifiers/keyPrefix.js +0 -27
- package/src/modifiers/mix.js +0 -25
- package/src/modifiers/overwrite.js +0 -18
- package/src/modifiers/prepend.js +0 -19
- package/src/modifiers/reverse.js +0 -23
- package/src/modifiers/update.js +0 -18
- package/src/simple.js +0 -49
- package/webpack.config.js +0 -28
package/src/mainLib.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
import walk from '@peter.naydenov/walk'
|
|
6
|
+
|
|
7
|
+
import flatObject from './flatObject/index.js' // Flat data api.
|
|
8
|
+
import flatData from './flatData/index.js' // Query data api. Used in model functions
|
|
9
|
+
import convert from './convertors/index.js' // Convertors
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
const INIT_DATA_TYPES = [
|
|
14
|
+
'std', 'standard'
|
|
15
|
+
, 'tuple', 'tuples'
|
|
16
|
+
, 'breadcrumb', 'breadcrumbs'
|
|
17
|
+
, 'file', 'files'
|
|
18
|
+
, 'midFlat'
|
|
19
|
+
, 'flat'
|
|
20
|
+
]
|
|
21
|
+
;
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
const mainLib = {
|
|
26
|
+
|
|
27
|
+
dependencies () {
|
|
28
|
+
return {
|
|
29
|
+
walk
|
|
30
|
+
, flatData
|
|
31
|
+
, flatObject
|
|
32
|
+
, convert
|
|
33
|
+
, INIT_DATA_TYPES
|
|
34
|
+
, main : () => ({ load : mainLib.load })
|
|
35
|
+
}
|
|
36
|
+
} // dependencies func.
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
, init ( inData, options={} ) {
|
|
41
|
+
let
|
|
42
|
+
defaultOptions = { model : 'std' }
|
|
43
|
+
, { model } = Object.assign ( {}, defaultOptions, options )
|
|
44
|
+
, dependencies = mainLib.dependencies
|
|
45
|
+
;
|
|
46
|
+
if ( !INIT_DATA_TYPES.includes(model) ) {
|
|
47
|
+
console.error ( `Can't understand your data-model: ${model}. Please, find what is possible on https://github.com/PeterNaydenov/dt-toolbox` )
|
|
48
|
+
return null
|
|
49
|
+
}
|
|
50
|
+
const
|
|
51
|
+
d = convert.from(model).toFlat ( dependencies, inData )
|
|
52
|
+
, flat = flatObject ( dependencies, d )
|
|
53
|
+
;
|
|
54
|
+
return flat
|
|
55
|
+
} // init func.
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
, load ( inData ) {
|
|
60
|
+
const index = {};
|
|
61
|
+
inData.forEach ( line => {
|
|
62
|
+
const [ , ,breadcrumbs ] = line;
|
|
63
|
+
index[breadcrumbs] = line
|
|
64
|
+
})
|
|
65
|
+
const copy = walk ({data: inData });
|
|
66
|
+
return flatObject ( mainLib.dependencies, [copy, index, inData ] )
|
|
67
|
+
} // load func.
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
, flating ( inData, options={} ) {
|
|
72
|
+
let
|
|
73
|
+
defaultOptions = { model : 'std' }
|
|
74
|
+
, { model } = Object.assign ( {}, defaultOptions, options )
|
|
75
|
+
;
|
|
76
|
+
if ( !INIT_DATA_TYPES.includes(model) ) return null
|
|
77
|
+
let [,,dt] = convert.from ('std').toFlat ( mainLib.dependencies, inData );
|
|
78
|
+
return dt
|
|
79
|
+
} // flating func.
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
, converting ( inData, options={} ) {
|
|
84
|
+
let
|
|
85
|
+
defaultOptions = { model : 'std', as: 'std' }
|
|
86
|
+
, { model, as } = Object.assign ( {}, defaultOptions, options )
|
|
87
|
+
;
|
|
88
|
+
if ( !INIT_DATA_TYPES.includes(model) ) return null
|
|
89
|
+
if ( !INIT_DATA_TYPES.includes(as) ) return null
|
|
90
|
+
let [,,dt] = convert.from ('std').toFlat ( mainLib.dependencies, inData );
|
|
91
|
+
|
|
92
|
+
return convert.to ( as, mainLib.dependencies, dt )
|
|
93
|
+
} // flating func.
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
, getWalk : () => walk
|
|
98
|
+
|
|
99
|
+
} // mainLib
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
export default mainLib
|
|
104
|
+
|
|
105
|
+
|
package/dist/dt-toolbox.min.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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(e,t,r,l,n)}function s(e,s,l,n,o){let[c,u]=n;Object.keys(e).forEach((a=>{let i=t(e[a]),p=e[a],d="array"===t(s),f=!isNaN(a);if("simple"!==i&&u){if(p=u({value:p,key:a,breadcrumbs:`${o}/${a}`}),null==p)return;i=t(p)}if("simple"===i){if(!c)return void(s[a]=p);let e=c({value:p,key:a,breadcrumbs:`${o}/${a}`});if(null==e)return;const t=function(e,t){return t instanceof Array&&!isNaN(e)}(a,s);t?s.push(e):s[a]=e}if("object"===i){const e={};d&&f?s.push(e):s[a]=e,l.push(r(p,e,l,n,`${o}/${a}`))}if("array"===i){const e=[];d&&f?s.push(e):s[a]=e,l.push(r(p,e,l,n,`${o}/${a}`))}}))}e.exports=function({data:e,keyCallback:r,objectCallback:l}){let n,o=[],c="root",u=[r,l];switch(t(e)){case"array":n=[],s(e,n,o,u,c);break;case"object":n={},s(e,n,o,u,c);break;case"simple":return e}for(const e of o)e.next();return n}},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),a=r.hasNumbers(c)?"array":"object",i=s.length;u[i]=`${e}/${l}`,s.push([a,i]),s[t].push([i,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:a}=t,i=[];switch(e){case"std":case"standard":return l.toFlat(t,r);case"tuple":case"tuples":r=a.tuplesToBradcrumbs(t,r);case"breadcrumb":case"breadcrumbs":return o=Object.keys(r),i=o.map((e=>r[e])),c=a.sanitizeFlatKeys(o),u=a.zipObject(c,i),s.toFlat(t,u);case"file":case"files":return o=r.map((e=>{let t=e.split("/");return i.push(t.pop()),t.join("/")})),c=a.sanitizeFlatKeys(o),u=a.zipObject(c,i),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,a=Object.keys(t[e]).map((e=>e.trim().replace(/\/$/,""))),i=l.hasNumbers(a),p=e.split("/");o=p.pop(),c=p.join("/");let d=u.indexOf(c);d>=0&&r[d].push([n,o]),i&&(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()),a=!(s.length>0);"array"===t&&c&&a&&(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,a={};return o.push([n(t),c++]),a.root=0,l({data:t,keyCallback:function(e){let{value:t,key:s,breadcrumbs:l}=e;const n=l.split("/");n.pop();const o=n.join("/"),c=a[o];return r[`root/${c}/${s}`]=t,t},objectCallback:function(e){let{value:t,breadcrumbs:r}=e,s=r.split("/"),l=s.pop();o.push([n(t),c]),a[r]=c,u=c;let i=s.join("/"),p=a[i];return o[p].push([c,l]),c++,t}}),[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),a=r(504),i=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:a,zipObject:i,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({data:t,keyCallback:e=>{let{value:t,key:s}=e,n=s.substr(5).split("/"),o=n[n.length-1];return r.hasNumbers([o])&&n.pop(),l.push([n.join("/"),t]),t}}),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({data:t,objectCallback:function(e){let{value:t,breadcrumbs:r}=e;if("root"===r)return t;let[l,n]=t;return s[l]=n,t}}),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 a;t._error=t._error.concat(r._error),a=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[i,p]=s.from("midFlat").toFlat(e,a);return t.structure=n({data:i}),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 a=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,a),t._select.structure=c({data: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({data: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({data: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 a;t._error=t._error.concat(r._error),a=n[s](c,u);let[i,p]=l.from("midFlat").toFlat(e,a);return t.structure=o({data:i}),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({data:t.structure,objectCallback:function(e){let{value:t,breadcrumbs:r}=e;if("root"===r)return t;if("string"==typeof t[0])return t;let[l,n]=t;return n===s&&c.push(l),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({data: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),a=["std","standard","tuple","tuples","breadcrumb","breadcrumbs","file","files","midFlat","shortFlat"],i={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=i.dependencies(),l=r.simpleDT(),{type:n,modify:c}=(r.help,{type:"std",modify:!1,...t});if(a.includes(n)){if(null!=e){const[t,s]="flat"==n||"shortFlat"==n?e:o.from(n).toFlat(r,e);l.structure=u({data: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(i.dependencies(),e):s.loadShort(i.dependencies(),e),preprocess(e,t,r){let{type:l="std"}={type:"std",modify:!1,...r},n=t(o.from(l).toFlat(i.dependencies(),e));return n?s.loadShort(i.dependencies(),n):(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:u({data: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]=o.from("midFlat").toFlat(i.dependencies(),t);return e.structure=u({data: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=u({data: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=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={...i.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",i.dependencies(),[e.structure,e.value]),e},withSelection(){let e=this,{structure:t}=e._select;return e._select.result=o.to("midFlat",i.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={...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,l=o.to("breadcrumb",i.dependencies(),[s.structure,s.value]),n=o.to("breadcrumb",i.dependencies(),[t.structure,t.value]),u=c[e](l,n),[a,p]=o.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,l=!!r._select.result,{help:n}=i.dependencies();let c,a,p;switch(e){case"value":case"values":if(a="values",l){let e=o.from("midFlat").toFlat(i.dependencies(),r._select.result);p=s.transform({...i.dependencies(),modify:a},e)}else p=s.transform({...i.dependencies(),modify:a},[r.structure,r.value]);c=o.to("std",i.dependencies(),p).map((e=>"string"==typeof e&&Number(e)||e));break;case"key":case"keys":if(a="keys",l){let e=o.from("midFlat").toFlat(i.dependencies(),r._select.result);p=s.transform({...i.dependencies(),modify:a},e),a="values",p=s.transform({...i.dependencies(),modify:a},p)}else p=s.transform({...i.dependencies(),modify:a},[r.structure,r.value]);c=o.to("std",i.dependencies(),p);break;case"standard":case"std":if(l){let e=o.from("midFlat").toFlat(i.dependencies(),r._select.result);c=o.to("std",i.dependencies(),e)}else c=o.to("std",i.dependencies(),[r._select.structure,n.extractSelection(r)]);break;case"breadcrumb":case"breadcrumbs":if(l){let e=o.from("midFlat").toFlat(i.dependencies(),r._select.result);c=o.to("breadcrumbs",i.dependencies(),e)}else c=o.to("breadcrumbs",i.dependencies(),[r._select.structure,n.extractSelection(r)]);break;case"tuple":case"tuples":if(l){let e=o.from("midFlat").toFlat(i.dependencies(),r._select.result);c=o.to("tuples",i.dependencies(),e)}else c=o.to("tuples",i.dependencies(),[r._select.structure,n.extractSelection(r)]);break;case"file":case"files":let e,t;if(l){let t=o.from("midFlat").toFlat(i.dependencies(),r._select.result);e=o.to("breadcrumbs",i.dependencies(),t)}else e=o.to("breadcrumbs",i.dependencies,[r._select.structure,n.extractSelection(r)]);t=n.reduceTuples(i.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",i.dependencies(),[r._select.structure,n.extractSelection(r)]);break;default:if(l)c=o.from("midFlat").toFlat(i.dependencies(),r._select.result);else{let e=n.extractSelection(r);c=[u({data: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: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(p),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=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/dist/index.html
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
7
|
-
<title>Using Dt-Toolbox in a browser</title>
|
|
8
|
-
<script src="dt-toolbox.min.js"></script>
|
|
9
|
-
<style>
|
|
10
|
-
pre {
|
|
11
|
-
padding : 10px;
|
|
12
|
-
background-color: #eee;
|
|
13
|
-
}
|
|
14
|
-
</style>
|
|
15
|
-
</head>
|
|
16
|
-
<body>
|
|
17
|
-
<h1>Using Dt-Toolbox in a browser</h1>
|
|
18
|
-
<p>
|
|
19
|
-
Dt-Toolbox is available as 'dtbox' global variable.
|
|
20
|
-
Open source code and read it.
|
|
21
|
-
</p>
|
|
22
|
-
<h3>Example</h3>
|
|
23
|
-
<p>Here is the sample data structure:</p>
|
|
24
|
-
<pre>
|
|
25
|
-
const user = [{
|
|
26
|
-
profile: {
|
|
27
|
-
name: 'Peter'
|
|
28
|
-
, age : 43
|
|
29
|
-
}
|
|
30
|
-
}]</pre>
|
|
31
|
-
<p>Simplify data and render a template with it.</p>
|
|
32
|
-
<pre>
|
|
33
|
-
dtbox
|
|
34
|
-
.init ( user )
|
|
35
|
-
.select ()
|
|
36
|
-
.space('profile')
|
|
37
|
-
.spread ( 'std', std => result = {...std} )
|
|
38
|
-
|
|
39
|
-
hookNode.innerHTML = `${result.name} is ${result.age} years old.`
|
|
40
|
-
</pre>
|
|
41
|
-
<h3>Result</h3>
|
|
42
|
-
<p id="render"></p>
|
|
43
|
-
<script>
|
|
44
|
-
const hookNode = document.getElementById ( 'render' );
|
|
45
|
-
|
|
46
|
-
const user = [{
|
|
47
|
-
profile: {
|
|
48
|
-
name: 'Peter'
|
|
49
|
-
, age : 43
|
|
50
|
-
}
|
|
51
|
-
}];
|
|
52
|
-
let
|
|
53
|
-
result
|
|
54
|
-
, data = dtbox.init ( user )
|
|
55
|
-
;
|
|
56
|
-
data
|
|
57
|
-
.select ()
|
|
58
|
-
.space ( 'profile' )
|
|
59
|
-
.assemble ()
|
|
60
|
-
.spread ( 'std', x => result = {...x})
|
|
61
|
-
|
|
62
|
-
hookNode.innerHTML = `${result.name} is ${result.age} years old.`
|
|
63
|
-
</script>
|
|
64
|
-
</body>
|
|
65
|
-
</html>
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
function change ( mainData, checkData ) {
|
|
2
|
-
// *** Compare values. Reduce to key/value pairs with different values.
|
|
3
|
-
let
|
|
4
|
-
result = {}
|
|
5
|
-
, mainKeys = Object.keys ( mainData )
|
|
6
|
-
;
|
|
7
|
-
mainKeys.forEach ( k => {
|
|
8
|
-
let
|
|
9
|
-
HAS_KEY = ( checkData.hasOwnProperty(k) )
|
|
10
|
-
, EQUAL_VALUES = HAS_KEY && ( mainData[k] === checkData[k] )
|
|
11
|
-
;
|
|
12
|
-
if ( !EQUAL_VALUES ) result[k] = checkData[k]
|
|
13
|
-
})
|
|
14
|
-
return result
|
|
15
|
-
} // change func.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
module.exports = change
|
|
20
|
-
|
|
21
|
-
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
function different ( mainData, checkData ) {
|
|
2
|
-
// *** Key compare. Returns key/value pairs where key does not exist.
|
|
3
|
-
let
|
|
4
|
-
result = {}
|
|
5
|
-
, checkKeys = Object.keys ( checkData )
|
|
6
|
-
;
|
|
7
|
-
checkKeys.forEach ( k => {
|
|
8
|
-
let HAS_KEY = mainData.hasOwnProperty(k);
|
|
9
|
-
if ( !HAS_KEY ) result[k] = checkData[k]
|
|
10
|
-
})
|
|
11
|
-
return result
|
|
12
|
-
} // different func.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
module.exports = different
|
|
17
|
-
|
|
18
|
-
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
function identical ( mainData, checkData ) {
|
|
2
|
-
// *** Compare values. Reduce data to identical key/value pairs.
|
|
3
|
-
let
|
|
4
|
-
result = {}
|
|
5
|
-
, mainKeys = Object.keys ( mainData )
|
|
6
|
-
;
|
|
7
|
-
mainKeys.forEach ( k => {
|
|
8
|
-
let
|
|
9
|
-
HAS_KEY = ( checkData.hasOwnProperty(k) )
|
|
10
|
-
, EQUAL_VALUES = HAS_KEY && ( mainData[k] === checkData[k] )
|
|
11
|
-
;
|
|
12
|
-
if ( EQUAL_VALUES ) result[k] = mainData[k]
|
|
13
|
-
})
|
|
14
|
-
return result
|
|
15
|
-
} // identical func.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
module.exports = identical
|
|
20
|
-
|
|
21
|
-
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
const
|
|
2
|
-
identical = require ( './identical' )
|
|
3
|
-
, change = require ( './change' )
|
|
4
|
-
, same = require ( './same' )
|
|
5
|
-
, different = require ( './different' )
|
|
6
|
-
, missing = require ( './missing' )
|
|
7
|
-
;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
module.exports = {
|
|
11
|
-
identical
|
|
12
|
-
, change
|
|
13
|
-
, same
|
|
14
|
-
, different
|
|
15
|
-
, missing
|
|
16
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
function missing ( mainData, checkData ) {
|
|
2
|
-
// *** Key compare. Returns key/value pairs that are missing
|
|
3
|
-
let
|
|
4
|
-
result = {}
|
|
5
|
-
, mainKeys = Object.keys ( mainData )
|
|
6
|
-
;
|
|
7
|
-
mainKeys.forEach ( k => {
|
|
8
|
-
let HAS_KEY = checkData.hasOwnProperty(k);
|
|
9
|
-
if ( !HAS_KEY ) result[k] = mainData[k]
|
|
10
|
-
})
|
|
11
|
-
return result
|
|
12
|
-
} // missing func.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
module.exports = missing
|
|
17
|
-
|
|
18
|
-
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
function same ( mainData, checkData ) {
|
|
2
|
-
// *** Compare keys. Returns key/value pairs where keys are the same.
|
|
3
|
-
let
|
|
4
|
-
result = {}
|
|
5
|
-
, mainKeys = Object.keys ( mainData )
|
|
6
|
-
;
|
|
7
|
-
mainKeys.forEach ( k => {
|
|
8
|
-
let HAS_KEY = checkData.hasOwnProperty(k);
|
|
9
|
-
if ( HAS_KEY ) result[k] = checkData[k]
|
|
10
|
-
})
|
|
11
|
-
return result
|
|
12
|
-
} // same func.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
module.exports = same
|
|
17
|
-
|
|
18
|
-
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* File data structure example:
|
|
7
|
-
* [
|
|
8
|
-
'rootFolder/profile/name/Peter',
|
|
9
|
-
'rootFolder/profile/age/42',
|
|
10
|
-
'rootFolder/profile/gender/male',
|
|
11
|
-
'rootFolder/logs/log.txt',
|
|
12
|
-
'rootFolder/friends/Dimitar',
|
|
13
|
-
'rootFolder/friends/Stefan',
|
|
14
|
-
'rootFolder/friends/Ivan',
|
|
15
|
-
'rootFolder/friends/Grigor'
|
|
16
|
-
]
|
|
17
|
-
*
|
|
18
|
-
* Looks like breadcrumbs but last element is the value. Key and value together.
|
|
19
|
-
*
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
function toFlat ( dependencies, rawValue ) {
|
|
23
|
-
if ( Object.keys(rawValue).length === 0 ) {
|
|
24
|
-
let
|
|
25
|
-
structure = [ [ 'object', 0 ] ]
|
|
26
|
-
, value = {}
|
|
27
|
-
;
|
|
28
|
-
return [ structure, value ]
|
|
29
|
-
}
|
|
30
|
-
let
|
|
31
|
-
{ help } = dependencies
|
|
32
|
-
, structure = []
|
|
33
|
-
, value = {}
|
|
34
|
-
, keyList = Object // Provides keys in order: from larger to shorter
|
|
35
|
-
.keys ( rawValue )
|
|
36
|
-
.map ( x => x.split('/') )
|
|
37
|
-
.sort ( (a,b) => b.length - a.length )
|
|
38
|
-
, tProps = {} // { objectLocation<string> : childObjectNames<set> }
|
|
39
|
-
, structRaw = [] // objectLocation strings
|
|
40
|
-
, propDone = []
|
|
41
|
-
;
|
|
42
|
-
|
|
43
|
-
keyList.forEach ( keyArr => { // Setup our temp structures: tProps and structRaw
|
|
44
|
-
keyArr.forEach ( (k,i) => {
|
|
45
|
-
let parent = keyArr.slice( 0, i ).join ( '/' );
|
|
46
|
-
if ( !parent ) return
|
|
47
|
-
if ( !tProps[parent] ) {
|
|
48
|
-
tProps[parent] = new Set()
|
|
49
|
-
structRaw.push ( parent )
|
|
50
|
-
}
|
|
51
|
-
tProps[parent].add ( k )
|
|
52
|
-
})
|
|
53
|
-
})
|
|
54
|
-
structRaw.forEach ( (el,i) => { // Build the structure rows
|
|
55
|
-
let elChildren = false;
|
|
56
|
-
if ( !structure[i] ) structure[i] = [ 'object', i ]
|
|
57
|
-
if ( propDone[i] ) el = propDone[i]
|
|
58
|
-
elChildren = Array.from ( tProps[el] )
|
|
59
|
-
if ( el === 'root' ) {
|
|
60
|
-
const mainType = help.hasNumbers ( elChildren ) ? 'array' : 'object';
|
|
61
|
-
structure[i][0] = mainType
|
|
62
|
-
}
|
|
63
|
-
elChildren.forEach ( name => { // Setup connections between object
|
|
64
|
-
let test = tProps[`${el}/${name}`];
|
|
65
|
-
if ( !test ) return
|
|
66
|
-
let
|
|
67
|
-
childProps = Array.from (test)
|
|
68
|
-
, type = help.hasNumbers ( childProps ) ? 'array' : 'object'
|
|
69
|
-
, lastIndex = structure.length
|
|
70
|
-
;
|
|
71
|
-
propDone[lastIndex] = `${el}/${name}`
|
|
72
|
-
structure.push ([type, lastIndex])
|
|
73
|
-
structure[i].push ( [lastIndex, name])
|
|
74
|
-
})
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
keyList.forEach ( k => { // Create flat keys and write values
|
|
78
|
-
let
|
|
79
|
-
name = k.pop()
|
|
80
|
-
, keySearch = k.join ( '/' )
|
|
81
|
-
, objNumber = null
|
|
82
|
-
, theKey = ''
|
|
83
|
-
;
|
|
84
|
-
objNumber = propDone.indexOf ( keySearch )
|
|
85
|
-
|
|
86
|
-
if ( objNumber < 0 ) objNumber = structRaw.indexOf(keySearch)
|
|
87
|
-
theKey = `root/${objNumber}/${name}`
|
|
88
|
-
value[theKey] = rawValue[`${keySearch}/${name}`]
|
|
89
|
-
})
|
|
90
|
-
return [ structure, value ]
|
|
91
|
-
} // toFlat func.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
function toType ( dependencies, [ structure, value ]) {
|
|
103
|
-
let
|
|
104
|
-
keys = Object.keys ( value )
|
|
105
|
-
, breadcrumbObject = {}
|
|
106
|
-
, flatNames = {}
|
|
107
|
-
;
|
|
108
|
-
structure.forEach ( ([type, id, ...items]) => { // Create data-structures
|
|
109
|
-
items.forEach ( item => {
|
|
110
|
-
let
|
|
111
|
-
[num,name] = item
|
|
112
|
-
, breadcrumbName = name
|
|
113
|
-
, checkID = id
|
|
114
|
-
;
|
|
115
|
-
for (let i=id; i >= 0; i-- ) {
|
|
116
|
-
let [type,x,...items] = structure[i];
|
|
117
|
-
items.forEach ( ([n,name]) => {
|
|
118
|
-
if ( n === checkID ) {
|
|
119
|
-
breadcrumbName = `${name}/${breadcrumbName}`
|
|
120
|
-
checkID = x
|
|
121
|
-
}
|
|
122
|
-
})
|
|
123
|
-
}
|
|
124
|
-
flatNames[num] = breadcrumbName
|
|
125
|
-
})
|
|
126
|
-
})
|
|
127
|
-
keys.forEach ( key => { // Conect data-structures
|
|
128
|
-
let
|
|
129
|
-
keyArray = key.split('/')
|
|
130
|
-
, breadcrumbKey = keyArray[1]
|
|
131
|
-
, breadcrumb = flatNames [ breadcrumbKey ]
|
|
132
|
-
;
|
|
133
|
-
if ( breadcrumbKey == '0' ) {
|
|
134
|
-
keyArray = keyArray.filter ( (segment,i) => i!=1 )
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
keyArray[1] = breadcrumb
|
|
138
|
-
}
|
|
139
|
-
breadcrumbObject [ keyArray.join('/') ] = value [key]
|
|
140
|
-
})
|
|
141
|
-
return breadcrumbObject
|
|
142
|
-
} // toType func.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
module.exports = { toFlat, toType }
|
|
147
|
-
|
|
148
|
-
|
package/src/help/filterObject.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
function filterObject ( id, keySelection, value={} ) {
|
|
2
|
-
// *** Filter object with by id
|
|
3
|
-
let
|
|
4
|
-
local = {} // Filtered object
|
|
5
|
-
, localSelection = [] // List of filtered object props
|
|
6
|
-
;
|
|
7
|
-
keySelection.forEach ( key => {
|
|
8
|
-
let
|
|
9
|
-
splited = key.split ( '/' )
|
|
10
|
-
, num = splited [ 1 ]
|
|
11
|
-
, prop = splited.pop()
|
|
12
|
-
;
|
|
13
|
-
if ( num == id ) {
|
|
14
|
-
local[prop] = value[key]
|
|
15
|
-
localSelection.push ( key )
|
|
16
|
-
}
|
|
17
|
-
})
|
|
18
|
-
return [ local, localSelection ]
|
|
19
|
-
} // filterObject
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
module.exports = filterObject
|
|
24
|
-
|
|
25
|
-
|
package/src/help/hasNumbers.js
DELETED
package/src/help/index.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const
|
|
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' )
|
|
15
|
-
;
|
|
16
|
-
|
|
17
|
-
const findType = d => ( d instanceof Array ) ? 'array' : 'object'
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
module.exports = {
|
|
22
|
-
findType // Is it array or object. Returns strings: 'array' | 'object'
|
|
23
|
-
, hasNumbers // Check if array contain number members. Returns boolean
|
|
24
|
-
, isItPrimitive // Returns boolean
|
|
25
|
-
, sanitizeFlatKeys // Sanitize 'file' format keys
|
|
26
|
-
, objectsByLevel // Object IDs organized by levels
|
|
27
|
-
, filterObject // Find object and object props in a value
|
|
28
|
-
, toBreadcrumbKeys // Breadcrumbs keys
|
|
29
|
-
, updateSelection // Updates selection list. Checks if element is already selected
|
|
30
|
-
, zipObject // Conect two arrays in a single object
|
|
31
|
-
, extractSelection // Creates 'value' object with selected keys only
|
|
32
|
-
, reduceTuples
|
|
33
|
-
, tuplesToBradcrumbs
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
function isItPrimitive (d) {
|
|
2
|
-
if ( typeof d == 'function' ) return true // it's not really primitive but we want function to be treated as primitive
|
|
3
|
-
return ( typeof d != 'object' ) ? true : false
|
|
4
|
-
} // isItPrimitive func.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
module.exports = isItPrimitive
|
|
9
|
-
|
|
10
|
-
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
function objectsByLevel ( structure ) {
|
|
2
|
-
return structure.reduce ( (res,row) => {
|
|
3
|
-
let level = [];
|
|
4
|
-
row.forEach ( (item,i) => {
|
|
5
|
-
if ( i > 1 ) level.push ( item[0] )
|
|
6
|
-
})
|
|
7
|
-
if ( level.length > 0 ) res.push ( level )
|
|
8
|
-
return res
|
|
9
|
-
},[[0]] );
|
|
10
|
-
} // objectsByLevel func.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
module.exports = objectsByLevel
|
|
15
|
-
|
|
16
|
-
|
package/src/help/reduceTuples.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
function reduceTuples ( dependencies, breadcrumbData ) {
|
|
4
|
-
// *** Converts breadcrumbs to array of tuples
|
|
5
|
-
const
|
|
6
|
-
{ help, walk } = dependencies
|
|
7
|
-
, result = []
|
|
8
|
-
;
|
|
9
|
-
walk ({
|
|
10
|
-
data : breadcrumbData,
|
|
11
|
-
keyCallback : ({ value:v, key:k }) => {
|
|
12
|
-
let
|
|
13
|
-
arr = k.substr(5).split('/')
|
|
14
|
-
, ln = arr.length
|
|
15
|
-
, lastEl = arr[ln-1]
|
|
16
|
-
;
|
|
17
|
-
if ( help.hasNumbers([lastEl]) ) arr.pop ()
|
|
18
|
-
result.push ( [ arr.join('/'), v])
|
|
19
|
-
return v
|
|
20
|
-
}
|
|
21
|
-
})
|
|
22
|
-
return result
|
|
23
|
-
} // reduceTuples func.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
module.exports = reduceTuples
|
|
28
|
-
|
|
29
|
-
|