{"_id":"1tree","_rev":"47-3c28d855f970cb68ad35649279a4aecb","name":"1tree","description":"Functional API for traversing and manipulating tree structures","dist-tags":{"latest":"0.4.14"},"versions":{"0.1.0":{"name":"1tree","version":"0.1.0","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","node","graph","acyclic","directed"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"engines":{"node":"6.3.0"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"63121b4389bf37ea406f400b0ca22d8a387c3b1b","_id":"1tree@0.1.0","_shasum":"7798477b716519c609373727d3599b94bf521ef8","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"7798477b716519c609373727d3599b94bf521ef8","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.1.0.tgz","integrity":"sha512-8CvXxXg6sqXBREeyEm98mansL6NGG3QEKsqR65jqPgdWjNTanygORprhdzO46e27qCt6eSzH8tkEv8MPDwhH9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQTxh33IAmZ6Zck2Gvj5KQ/DEi0ol+AQJRNtKL8nHZzAIhAJTtP8DZU/TvQunHyX8lm3uw64D1gm8jDk3+M4M+FOSl"}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.1.0.tgz_1474431740155_0.4210222768597305"},"deprecated":"Moved to @mojule/tree"},"0.1.1":{"name":"1tree","version":"0.1.1","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","node","graph","acyclic","directed"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"engines":{"node":"6.3.0"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"3cee0f9dc091050e1b42bdbec47e69f6f389e362","_id":"1tree@0.1.1","_shasum":"c3e76f4a0fe7addb8361f7a9995c277c42aaaaf5","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"c3e76f4a0fe7addb8361f7a9995c277c42aaaaf5","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.1.1.tgz","integrity":"sha512-hIr7mIBHA9wM98HqUe+NcWZ4njEm0qibTbVv26Wz95Vy1PuwH1al7egAX4aCEUKrSCiSQZCCMJ5rEOO3TU6X/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpOHwdhiBZMWaQuZp7xv21IqSNBebDjVvOY09VNTq0mgIgHj/5rdvk5du4azESvN87gK6xXjIl4XAOZBhKSyBg/Nk="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.1.1.tgz_1474433618971_0.6926501367706805"},"deprecated":"Moved to @mojule/tree"},"0.1.2":{"name":"1tree","version":"0.1.2","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"30fd2357c0ed3dd9160afa6c72544d5ae7d34f3e","_id":"1tree@0.1.2","_shasum":"6a5b2b19e09298625c9cffedb6c084908af82f59","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"6a5b2b19e09298625c9cffedb6c084908af82f59","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.1.2.tgz","integrity":"sha512-QCGbCQxCFbOpD0ig6ofOlkKm21VvmfulZ/HmZm/JmhuMb/sNF25eW9DpRRsk2MeiSYCvOkOMlMYEECNTkONGFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHeQ4usejlaa3J6Z5v2AgXUK1zuHa0BupWaYxvsuN7/EAiEA4aLDWJ3wxlZicygvyjK7qWsbI3GrNMt4A3U3jzEOSuQ="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.1.2.tgz_1474435072793_0.13904964155517519"},"deprecated":"Moved to @mojule/tree"},"0.1.3":{"name":"1tree","version":"0.1.3","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"4b0ac44c0f830dcfa893a18f502e8e74454f2e0a","_id":"1tree@0.1.3","_shasum":"6a540324916a351509ea88c3eb9270d09d7da414","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"6a540324916a351509ea88c3eb9270d09d7da414","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.1.3.tgz","integrity":"sha512-irJJeCawUOKWhQwrOjG641hrmsO7hEg5Qk5Tv8K84TmSv8UwMEbAcDYOc2K4cdzhPAlkqNehY6iW9xTeKK+u0g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7LbF0Md1Ts6O7eewktKYowjkxlYXdvGp4ZOL6Emyy0wIhAPzlrSlrfdUVFJDPXOoCbjy2umi3qr1Vr/8tJtXOpOqT"}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.1.3.tgz_1474586769523_0.9350588535889983"},"deprecated":"Moved to @mojule/tree"},"0.2.0":{"name":"1tree","version":"0.2.0","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"190bb03aa12aa69645087fd1ef60dd2540172a96","_id":"1tree@0.2.0","_shasum":"4c375423e282f4d65d13c3b557997c7c1ecf99f3","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"4c375423e282f4d65d13c3b557997c7c1ecf99f3","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.2.0.tgz","integrity":"sha512-Vv8f4dwrrdxazt8E+dqLlVdYAyr5NjqOpcesUT16M2ZNeHn6Gep9ajTIQJbYNGs9ezVbN6Rf0CuYJT9m6hlPwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBVKTZTBHFH8qHOhzyUmWVZGtg60UjpVF8T0qfNSTvQiAiEAtFmSyWDkvHa499feSd5IRpi76HVSO1X840NObM5ZWmY="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/1tree-0.2.0.tgz_1474858189163_0.09431770234368742"},"deprecated":"Moved to @mojule/tree"},"0.2.1":{"name":"1tree","version":"0.2.1","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"4b9055368dedec350dd9eca22ecbfaf20f63ef32","_id":"1tree@0.2.1","_shasum":"202ec9552e4e2baf04bcc112424c35c8cce6e554","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"202ec9552e4e2baf04bcc112424c35c8cce6e554","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.2.1.tgz","integrity":"sha512-ozXsq+95noybzJLslWZkqR/SeBW7zx6Z5afP2SdMLKlwXHxvdK7xt91v47BZsL8zb1Y18G471aT5cpmI0Qk0yQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDBZUaoLxpodQW76jHFhjRGuoyeyn+tDVcNyHRVYjGkGAiAOB7XGp9LqvFxG8PHLuTypDc9x3DfcfCJZUN+rQF6Gzg=="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.2.1.tgz_1474859462085_0.9570989795029163"},"deprecated":"Moved to @mojule/tree"},"0.3.0":{"name":"1tree","version":"0.3.0","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"179d74aef31d967c155ab68e7d58780cc20c3d7b","_id":"1tree@0.3.0","_shasum":"9c3410255aa183e79f062c2d41660e091bbb471e","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"9c3410255aa183e79f062c2d41660e091bbb471e","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.3.0.tgz","integrity":"sha512-U93ZxTx5XXiqJ4xD4H6Fnoffm2cp2/Ambrgh6cu63/gF7Ss8XmDAGAxAyD/g1pBkqbnIc2U72A+pYVEslyCJSA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEpv/QFDIfFY8WQkKDU025EA1/BdAxwMbjVIPjTYL0zZAiEA6eaCM2RqJekxk/n9tHyaeF631M/+dmgMBojbK7Sougg="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.3.0.tgz_1475198944987_0.2286395423579961"},"deprecated":"Moved to @mojule/tree"},"0.3.1":{"name":"1tree","version":"0.3.1","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"c2a0781148e10b9a09ebaf294a3e602df4d32978","_id":"1tree@0.3.1","_shasum":"c4b364d919d569bd1380c711b52091b7c84486d1","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"c4b364d919d569bd1380c711b52091b7c84486d1","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.3.1.tgz","integrity":"sha512-eefDeqPAeqriNqvuI870zqAan2vDS2zAW+RVm3CTV6ynR9eehrV3PsqcHUD79iwTcwVkg6mJy1UyYK2PSgX3YA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE7hE2/exsbFqqz0HpyLHn6mIvWvz5k8XcIBchlJWpCiAiEA0IxAiQPNa8Aovs3ZJSKQ74cDU9YWkGX2rxseDVnCKfk="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.3.1.tgz_1476330208929_0.012593745719641447"},"deprecated":"Moved to @mojule/tree"},"0.3.2":{"name":"1tree","version":"0.3.2","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"ffd395d8d4fff3149bab4159fbf4b104d2afe7ca","_id":"1tree@0.3.2","_shasum":"732d0805833d43941ea2d9f6e07e93ff4cb3ba0c","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"732d0805833d43941ea2d9f6e07e93ff4cb3ba0c","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.3.2.tgz","integrity":"sha512-irSQqOTi1oSmcDShe2vUTN0nkDRcQMwUiCksTPGY3W4Y8xEN8FedsLBqgtLrOSpJGmEuqO01BiMzFebnae17qw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPuL4+0dKN6QFaxPwZhgxN89ezB2h+0yVGiwHCOqsSVQIhAOCsyydjVsI40khqA0edsyviZJsrmDwko+emJ5IwjM3O"}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/1tree-0.3.2.tgz_1479880292349_0.8452901965938509"},"deprecated":"Moved to @mojule/tree"},"0.3.3":{"name":"1tree","version":"0.3.3","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"1ad378ea1c61a32cfe98b0aa54e0d050866a9ec6","_id":"1tree@0.3.3","_shasum":"3192e133a19d5ecae167c63ee0b57347adf20ca5","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"3192e133a19d5ecae167c63ee0b57347adf20ca5","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.3.3.tgz","integrity":"sha512-3XgBfoIVuekC7ij5Qf6xmUnumhx9Z01bMIw97YM+nR0EB0e/1IEFywiVPzlqUlu4oenfL6pgf0LdAhdzqXOFAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB28S9S+z8BsIZw16icyTkRuz6uJZNLaaNwJsRzF4SVmAiEA+hoVeIpyQcs2dtIOir7WkMe65IbcDODGogKI571r+xU="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/1tree-0.3.3.tgz_1480634685073_0.2738586806226522"},"deprecated":"Moved to @mojule/tree"},"0.4.0":{"name":"1tree","version":"0.4.0","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"cd5b831da62c78a1a6bd78674842bef895f51824","_id":"1tree@0.4.0","_shasum":"f2ed7dd8549bf5e88ae9f073ae53b25b3a8d4c72","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"f2ed7dd8549bf5e88ae9f073ae53b25b3a8d4c72","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.0.tgz","integrity":"sha512-zpe3J77wZdSC0fNTn2kMuP4Ab19txcXxCGEvZaXLGTNSMF53+W1K7APAbfTFlRSzHyvh12dn8wh3X3E31sctmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3p2feCbdNHOTpu6aczltET1h35zt++Sj3At+zM+gCnAiBsEKGFsw7+H6b7ZqQj2FGupXnbkjLpcCuDC6jYKP5Bvg=="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.4.0.tgz_1481589351910_0.4497868395410478"},"deprecated":"Moved to @mojule/tree"},"0.4.1":{"name":"1tree","version":"0.4.1","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"450ff23742ae02793c734a4ce08291fe5b204df6","_id":"1tree@0.4.1","_shasum":"2c7e852e6106f7020563e6a04d43df6e9c8feaac","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"2c7e852e6106f7020563e6a04d43df6e9c8feaac","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.1.tgz","integrity":"sha512-WmvWlPOHCV+oawTpI2SH6+81Tp2QWvXkis/eWulyzYR8mzCpu+XfHFXrDfbiPkmvoDAgSH8Y7WAlfiQKIhlgcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7KJh36KURCG5hmIi8Atf8bVSa6qp3gUAULx4Ufqh+bAIgD/3CTvauPw3wmO6h1rsssUf264ccTM7JnPx3jiRp9es="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.4.1.tgz_1484619224400_0.31005107844248414"},"deprecated":"Moved to @mojule/tree"},"0.4.2":{"name":"1tree","version":"0.4.2","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","gitHead":"450ff23742ae02793c734a4ce08291fe5b204df6","_id":"1tree@0.4.2","_shasum":"b4a36e405b6ce89676fd1949d6d8a618edb765d0","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"b4a36e405b6ce89676fd1949d6d8a618edb765d0","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.2.tgz","integrity":"sha512-Gi7tBQrGeLHi+Giy58M//J1crtkY5P+tcRYiZs70ooeiDXyxtKkQqExIZVKVch49Ra95sk5ONpa7JtqsXm7wOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIElZypuhdAbtA1lUaMI+0OT0HoZf+KQJpiDcTAXXLA6qAiEA52LF2RTx3wEUO57vexRAK2NuVo38N9Z6aFPZQxTGc14="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.4.2.tgz_1484704181216_0.39855523803271353"},"deprecated":"Moved to @mojule/tree"},"0.4.3":{"name":"1tree","version":"0.4.3","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.1"},"gitHead":"d84f3a714fa79a1b0775b39020f7a4bc1b69e897","_id":"1tree@0.4.3","_shasum":"8364c87c64247b400f026b7706553f9d032b91df","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"8364c87c64247b400f026b7706553f9d032b91df","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.3.tgz","integrity":"sha512-USVja4CXtFoO/zw6VXdea2UyUdtwyCGblkgVMfrXtwODXEiX+jems6YZ+R003kN//6aoxFMpuoztdFn23p6g7A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCZbiqh1VnQNs8bBvhRrLWfdLSULLLCEMmAdFfC39uPwIhAPHmvCNqhJJEwZR2BEyYog8wi3yrHovcKuCm6EWe3Cwv"}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/1tree-0.4.3.tgz_1484878745700_0.11084193247370422"},"deprecated":"Moved to @mojule/tree"},"0.4.4":{"name":"1tree","version":"0.4.4","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.1"},"gitHead":"dd180b37acb37e92c64f5228c897279d7264e2be","_id":"1tree@0.4.4","_shasum":"52d9e674aeed74a9bc53a36952ee429d38aa4c0c","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"52d9e674aeed74a9bc53a36952ee429d38aa4c0c","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.4.tgz","integrity":"sha512-rwzqvB76XuCNXKiKm0NhXXpS7TTKWWHRu91UhIX/uNCpaKxx93gjYgXqclnm1rfSgLRPDoXHEra9WItIU8vH6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHmOL3qo7KXVRhNArpKkVBoKs4Yt4IGRC+o/WSEumLwUAiAp4A+9CAMv2kTWLKXiy5UjJ+mIgGCaZeqe2Czm8sIJNA=="}]},"maintainers":[{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/1tree-0.4.4.tgz_1484883368958_0.44885093392804265"},"deprecated":"Moved to @mojule/tree"},"0.4.5":{"name":"1tree","version":"0.4.5","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.1"},"gitHead":"879502e8ccb0797d5ea154f93b87cba84083feeb","_id":"1tree@0.4.5","_shasum":"7565c24ec2bef7de89993d51fcddc7c8a529bfda","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"andybell","email":"andy.bell@informationage.co.nz"},"dist":{"shasum":"7565c24ec2bef7de89993d51fcddc7c8a529bfda","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.5.tgz","integrity":"sha512-kn3lUJsuiKHCWwW+u3fCx0o6vQgPzyfDrP7c9VHJgS4EOHE2Ii5d6xxMdKnKTwlZdJBNeCMVisf4JD91wWDJPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/d9tZHciabFjVvbP275R3n6pQwVgKHFsW1UIhhNEIugIgHJI0YMRCjnCV2M38bqgTek53GF4pPCfqTjZYKM+NJjY="}]},"maintainers":[{"name":"andybell","email":"andy.bell@informationage.co.nz"},{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.4.5.tgz_1485225438859_0.34634216083213687"},"deprecated":"Moved to @mojule/tree"},"0.4.6":{"name":"1tree","version":"0.4.6","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.3"},"gitHead":"f9cf27aef30258bd5f2cabb364ad259f61d43b8c","_id":"1tree@0.4.6","_shasum":"5a7e6e92f85b7cce0ef5ee9a0c0efaf8d32930e4","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"nrkn","email":"nrkn.com@gmail.com"},"dist":{"shasum":"5a7e6e92f85b7cce0ef5ee9a0c0efaf8d32930e4","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.6.tgz","integrity":"sha512-/uxsERXKqQWHN0euEZUBqCR1xm4sAwxrtn5cKnTI8UpNji0KP3hVYjL6XOLPNJ5km6nSIDBNBazKpvaUK9jwNA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGYi9ZDGhgPhrwc5E524VnwsHoWfMExeYYhojSE4wDPQIgXqtvFLAxpPBNL7fR6S02HsgzG9TL6xFGBeNzHDH1uUY="}]},"maintainers":[{"name":"andybell","email":"andy.bell@informationage.co.nz"},{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/1tree-0.4.6.tgz_1485314206660_0.0071882393676787615"},"deprecated":"Moved to @mojule/tree"},"0.4.7":{"name":"1tree","version":"0.4.7","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.3"},"gitHead":"d9611898b91f1ebcfef198044d34447cea5d81d3","_id":"1tree@0.4.7","_shasum":"e8846690ca2e791abe59bda863dd4c1b809c6b9e","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"andybell","email":"andy.bell@informationage.co.nz"},"dist":{"shasum":"e8846690ca2e791abe59bda863dd4c1b809c6b9e","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.7.tgz","integrity":"sha512-1+bhaEHel3av8ZPCWrjNid7W/lzLr0TAXIdfWQenCjRnTKd0gZsut6OmcZM3dnzzVIrSk1mc4217wvuZdaSZPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCE6ayE8tvlP8DAvK+MNxfPCQ5117mCXsvGncPYKcOJagIgCWpIMmWArZntnrPOkRaSqRUeUh+W9JPS/PhFYL6gFgQ="}]},"maintainers":[{"name":"andybell","email":"andy.bell@informationage.co.nz"},{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.4.7.tgz_1485315100454_0.7571796488482505"},"deprecated":"Moved to @mojule/tree"},"0.4.8":{"name":"1tree","version":"0.4.8","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.3"},"gitHead":"66a22b77816f221c40717ebdee965e97011470fb","_id":"1tree@0.4.8","_shasum":"8981c22e85ed1f103d85f666070fdfcc6245fc07","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"andybell","email":"andy.bell@informationage.co.nz"},"dist":{"shasum":"8981c22e85ed1f103d85f666070fdfcc6245fc07","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.8.tgz","integrity":"sha512-loXcxNI/FerrqPBNh5pqqv20n6tzblUX4BiptAQ9U8EwoTvCezYmDlAo700yNhA3VwroMc2f8riRJ4xtou5VyQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCr8HkewVHj8RtqCovKobUV5SRbE8axMbJkXd7V2laAXAIhANb8g1JZZSb2EbXcCx6mBIqYW99TgRley9AGLq0D8I43"}]},"maintainers":[{"name":"andybell","email":"andy.bell@informationage.co.nz"},{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.4.8.tgz_1485317725309_0.7332005866337568"},"deprecated":"Moved to @mojule/tree"},"0.4.9":{"name":"1tree","version":"0.4.9","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.3"},"gitHead":"92d2b01fb3de9ae7dac1c593ad5b953bf7ebbd87","_id":"1tree@0.4.9","_shasum":"2416d225094f24b53c72fd11f8b3cee24459d39d","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"andybell","email":"andy.bell@informationage.co.nz"},"dist":{"shasum":"2416d225094f24b53c72fd11f8b3cee24459d39d","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.9.tgz","integrity":"sha512-uGtIbpFFepDSyqb0sZodi5vMxO+G1mJpHwVnhZI9asmDE05Z5yEYo67kRO3u23bD2sKH8QGJUA5c2rwIiUR0Lw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/Vzv0GEvJ1d79b9MPtWI1t1rt3anLdm3jkfOlHP99ZQIhAICJMHJuzqLGykmqj6jgs+g0xA6C0Z3lGuKTKp2mcR29"}]},"maintainers":[{"name":"andybell","email":"andy.bell@informationage.co.nz"},{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.4.9.tgz_1485386880392_0.8585451061371714"},"deprecated":"Moved to @mojule/tree"},"0.4.10":{"name":"1tree","version":"0.4.10","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.3"},"gitHead":"42ca21e00320be907612a69a88bd9005b327099a","_id":"1tree@0.4.10","_shasum":"638367b5959dcf37993f01243bd907f419629037","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"andybell","email":"andy.bell@informationage.co.nz"},"dist":{"shasum":"638367b5959dcf37993f01243bd907f419629037","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.10.tgz","integrity":"sha512-5OOgKQ2e9LZpOOQLi6+KCTTzBWkT6qdSB8WH05TAM11Y8CFX4Q34c6YNa/owOzvy3dXkX+LmJPzQtr3YpIGrlA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcJr+VFU8x85KNN425Ww3AouG0R//2VqWl5z/FnmUTawIgQKSRPWaA1R/W1kUd0sb1mzIFph0lxEMAblhkXD1fGj0="}]},"maintainers":[{"name":"andybell","email":"andy.bell@informationage.co.nz"},{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/1tree-0.4.10.tgz_1486430772574_0.9598947789054364"},"deprecated":"Moved to @mojule/tree"},"0.4.12":{"name":"1tree","version":"0.4.12","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.5"},"gitHead":"7436f77525b61573e63a87e572075751ab9c2fc6","_id":"1tree@0.4.12","_shasum":"e5932d28ea04e0d081ff775d66ba491726a8760f","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"andybell","email":"andy.bell@informationage.co.nz"},"dist":{"shasum":"e5932d28ea04e0d081ff775d66ba491726a8760f","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.12.tgz","integrity":"sha512-N70orSTNVcfNcCL2YIm9aPyKLiUZh8yDr8aZzbitBx1ZICx8HX854hiO3B1Xi6gUbSnePBR3ccqz7XpTFQWg+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDDFwyM2mxU5XY6fJ/QYKSvTmZKdkUwG9vjt0uPyIrCwIgT0Up7gfy/xh/TQPD5qhW1XS61p8FtOEFalsY0KQE86Y="}]},"maintainers":[{"name":"andybell","email":"andy.bell@informationage.co.nz"},{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.4.12.tgz_1486595778249_0.054084433475509286"},"deprecated":"Moved to @mojule/tree"},"0.4.13":{"name":"1tree","version":"0.4.13","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.5"},"gitHead":"a1963985dc65237d86a5cf42384f8a0dd5092f96","_id":"1tree@0.4.13","_shasum":"505ce9195f2851c71cc83abce65c510e07b234b1","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"andybell","email":"andy.bell@informationage.co.nz"},"dist":{"shasum":"505ce9195f2851c71cc83abce65c510e07b234b1","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.13.tgz","integrity":"sha512-mNhY93RvZ1FmPAFXtkWAa2UrYPVG3acnRGmelkgSHsUVRSs6c0HCxYvPMvFC2DFq0nl0BsG7xVhssyQIft/Ehg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVYOmBupz3OQq70MBxSaLh3/nkuQw/oy5VXYZ6Sfm3nQIgD1Ov56s0hnbMDb/MuKo3gk9sQSqldoQ6y3Ce2mPwQ7g="}]},"maintainers":[{"name":"andybell","email":"andy.bell@informationage.co.nz"},{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/1tree-0.4.13.tgz_1487206100088_0.14187463372945786"},"deprecated":"Moved to @mojule/tree"},"0.4.14":{"name":"1tree","version":"0.4.14","description":"Functional API for traversing and manipulating tree structures","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"license":"MIT","devDependencies":{"babel-preset-es2015":"^6.14.0","gulp":"^3.9.1","gulp-babel":"^6.1.2","jsdom":"^9.5.0","mocha":"^3.0.1"},"keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"homepage":"https://github.com/mojule/1tree#readme","dependencies":{"mojule-utils":"^0.1.8"},"gitHead":"3d514ea456eaf48e37ba8ef2b2c6a012015e32a4","_id":"1tree@0.4.14","_shasum":"998721123c58dcdcf8cc434f013da732609225e5","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"andybell","email":"andy.bell@informationage.co.nz"},"dist":{"shasum":"998721123c58dcdcf8cc434f013da732609225e5","tarball":"https://registry.npmjs.org/1tree/-/1tree-0.4.14.tgz","integrity":"sha512-dZvakWFCxQMZg8ERke3ea73axki+5V02f173WwVxbAqPiRBU8hMUK0tPvvZa0dozx0dHkIzq8l04DR9om5PCqQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBJzOTtLD2FISG5VAIvIcquour5olidca//+JNNDNsIgIhAOWwtj7zNlxKhmUWZqs0dFaYn+PeyDQ//mLANaIWdXgo"}]},"maintainers":[{"name":"andybell","email":"andy.bell@informationage.co.nz"},{"name":"nrkn","email":"nrkn.com@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/1tree-0.4.14.tgz_1489023912581_0.37162168766371906"},"deprecated":"Moved to @mojule/tree"}},"readme":"# 1tree\r\n\r\n![1tree](./1tree.png)\r\n\r\n> *One tree to rule them all, one walk to find them,*\r\n> *One tree to bring them all and in the node graph bind them.*\r\n\r\n## A functional API for traversing and manipulating tree structures\r\n\r\n- extensive traversal and manipulation API (comparable to DOM or jQuery)\r\n- provide an adapter to any other tree structure by implementing a few simple functions and get the rest of the API for free\r\n- supports plugins to extend or modify functionality\r\n- small footprint, no external dependencies, fast\r\n- optimised for large graphs, full test suite\r\n\r\n## Quick start\r\n\r\n`npm install 1tree --save`\r\n\r\nCreate a basic tree where each node is just a string:\r\n\r\n```javascript\r\nconst Tree = require( '1tree' )\r\n\r\nconst root = Tree.createRoot( 'Animalia' )\r\nconst chordata = Tree.createNode( 'Chordata' )\r\n\r\nroot.append( chordata )\r\n\r\nroot.walk( n => console.log( n.value() ) )\r\n```\r\n\r\n## API\r\n\r\n### Basics\r\n\r\nCreate a tree:\r\n\r\n```javascript\r\nconst root = Tree.createRoot( rootValue )\r\n```\r\n\r\nCreate a node:\r\n\r\n```javascript\r\nconst node = Tree.createNode( value )\r\n```\r\n\r\nGet the node's underlying implementation:\r\n\r\n```javascript\r\nconst rawNode = node.get()\r\n```\r\n\r\nGet a node's value:\r\n\r\n```javascript\r\nconst value = node.value()\r\n```\r\n\r\nSet a node's value:\r\n\r\n```javascript\r\nnode.value( 'something' )\r\n```\r\n\r\nNote that the value that you give a node can be anything, but I highly\r\nrecommend that you use only JSON-serializable objects, it makes your resultant\r\ngraph more useful as you can easily pass it over the wire, store it in a\r\ndatabase etc.\r\n\r\nFor most of the examples we just use a string as the node's value.\r\n\r\nA contrived example using object literals:\r\n\r\n```javascript\r\nconst root = Tree.createRoot({\r\n  fileType: 'folder'\r\n  name: 'Photos'\r\n})\r\n\r\nconst selfie = Tree.createNode({\r\n  fileType: 'file',\r\n  name: 'selfie.jpg'\r\n})\r\n\r\nroot.append( selfie )\r\n```\r\n\r\n### Traversal\r\n\r\nThe comment above each API method example is the function signature in\r\n[rtype](https://github.com/ericelliott/rtype) notation\r\n\r\n#### getChildren\r\n\r\nGet the child nodes of the current node\r\n\r\n```javascript\r\n// getChildren() => [Node]\r\n\r\nconst children = node.getChildren()\r\n```\r\n\r\n#### childAt\r\n\r\nGets the child at the specified index\r\n\r\n```javascript\r\n// childAt( index: Integer ) => childNode: Node\r\n\r\nconst second = node.childAt( 2 )\r\n```\r\n\r\n#### index\r\n\r\nGets the index of the node relative to its siblings\r\n\r\n```javascript\r\n// index() => childIndex: Integer\r\n\r\nconst index = node.index()\r\n```\r\n\r\n#### firstChild\r\n\r\nGet the first child of the current node\r\n\r\n```javascript\r\n// firstChild() => childNode: Node\r\n\r\nconst first = node.firstChild()\r\n```\r\n\r\n#### lastChild\r\n\r\nGet the last child of the current node\r\n\r\n```javascript\r\n// lastChild() => childNode: Node\r\n\r\nconst last = node.lastChild()\r\n```\r\n\r\n#### walk\r\n\r\nDo a depth-first traversal of the tree starting at the current node\r\n\r\n```javascript\r\n// walk( callback: Function ) => Void\r\n\r\nnode.walk( n => console.log( n.value() ) )\r\n```\r\n\r\nThe callback is passed the current node, the parent of the current node, and the\r\ndepth relative to the inital node. You can halt the walk by returning a truthy\r\nvalue from your callback.\r\n\r\n```javascript\r\n// callback( current: Node, parent: Node, depth: Integer ) => stop: Boolean\r\n\r\nnode.walk( ( current, parent, depth ) => {\r\n  console.log( current.value(), parent.value() )\r\n\r\n  if( depth > 5 ) return true\r\n})\r\n```\r\n\r\n#### walkUp\r\n\r\nTraverses the tree upwards from the current node, performing a callback on each\r\nparent until it reaches the root of the tree or the callback returns a truthy\r\nvalue. The traversal starts from the current node.\r\n\r\n```javascript\r\n// walkUp( callback: Function ) => Void\r\n\r\nnode.walkUp( n => console.log( n.value() ) )\r\n```\r\n\r\nThe callback is passed only the current node:\r\n\r\n```javascript\r\n// callback( current: Node ) => stop: Boolean\r\n\r\nnode.walkUp( n => {\r\n  const value = n.value()\r\n\r\n  console.log( value )\r\n\r\n  if( value === 'Some Value' ) return true\r\n})\r\n```\r\n\r\n#### find\r\n\r\nTraverses the tree from the current node and returns the first node matching a\r\npassed in predicate function.\r\n\r\n```javascript\r\n// find( test: Predicate ) => Node\r\n\r\nconst target = node.find( n => n.value() === 'Some Value' )\r\n\r\nconsole.log( target.value() )\r\n```\r\n\r\n#### findAll\r\n\r\nTraverses the tree from the current node and returns all nodes matching a\r\npassed in predicate function.\r\n\r\n```javascript\r\n// findAll( test: Predicate ) => [Node]\r\n\r\nconst targets = node.findAll( n => n.value() === 'Some Value' )\r\n\r\ntargets.forEach( n => console.log( n.value() ) )\r\n```\r\n\r\n#### getParent\r\n\r\nGets the parent of the current node\r\n\r\n```javascript\r\n// getParent() => parentNode: Node\r\n\r\nconst parent = node.getParent()\r\n```\r\n\r\n#### closest\r\n\r\nFinds the first node matching the passed in predicate, traversing upwards from\r\nthe current node\r\n\r\n```javascript\r\n// closest( test: Predicate ) => Node\r\n\r\nconst target = node.closest( n => n.value() === 'Some Value' )\r\n\r\nconsole.log( target.value() )\r\n```\r\n\r\n#### ancestors\r\n\r\nReturns a list of all ancestors of the current node, where the head of the list\r\nis the current node's parent and the tail is the root node.\r\n\r\n```javascript\r\n// ancestors() => [Node]\r\n\r\nconst ancestors = node.ancestors()\r\n\r\nancestors.forEach( n => console.log( n.value() ) )\r\n```\r\n\r\n#### nextSibling\r\n\r\nReturns the next sibling of the current node, or `undefined` if the current node\r\nis the last child.\r\n\r\n```javascript\r\n// nextSibling() => siblingNode: Node\r\n\r\nconst next = node.nextSibling()\r\n\r\nif( next ){\r\n  console.log( 'Next sibling value is', next.value() )\r\n} else {\r\n  console.log( 'Current node is last child' )\r\n}\r\n```\r\n\r\n#### previousSibling\r\n\r\nReturns the previous sibling of the current node, or `undefined` if the current node\r\nis the first child.\r\n\r\n```javascript\r\n// previousSibling() => siblingNode: Node\r\n\r\nconst prev = node.previousSibling()\r\n\r\nif( prev ){\r\n  console.log( 'Previous sibling value is', prev.value() )\r\n} else {\r\n  console.log( 'Current node is first child' )\r\n}\r\n```\r\n\r\n#### siblings\r\n\r\nReturns all siblings of the current node, excluding the current node. If the\r\ncurrent node is the only child of its parent, an empty array is returned.\r\n\r\n```javascript\r\n// siblings() => [Node]\r\n\r\nconst siblings = node.siblings()\r\n\r\nsiblings.forEach( n => console.log( n.value() ) )\r\n```\r\n\r\n#### descendents\r\n\r\nReturns all of a node's children, their children etc. as a flat array in depth\r\nfirst order. Returns an empty array if the node has no children.\r\n\r\n```javascript\r\n// descendents() => [Node]\r\n\r\nconst descendents = node.descendents()\r\n\r\ndescendents.forEach( n => console.log( n.value() ) )\r\n```\r\n\r\n#### contains\r\n\r\nReturns a boolean indicating whether a node matching the predicate was found,\r\nsearching from the current node downwards.\r\n\r\n```javascript\r\n// contains( test: Predicate ) => Boolean\r\n\r\nconst hasValue = node.contains( n => n.value() === 'Some Value' )\r\n```\r\n\r\n#### hasChildren\r\n\r\nReturns a boolean indicating whether or not the current node has any children,\r\nor false if it doesn't (is a leaf node).\r\n\r\n```javascript\r\n// hasChildren() => Boolean\r\n\r\nconst hasChildren = node.hasChildren()\r\n```\r\n\r\n#### isEmpty\r\n\r\nReturns a boolean indicating whether or not the current node *can* have\r\nchildren - note, not the same as `hasChildren`, which is whether or not the node\r\n*does* have children. The default implementation always returns `false`, but\r\nyou can override it to make leaf-only nodes.\r\n\r\n```javascript\r\n// isEmpty() => Boolean\r\n\r\nconst isEmpty = node.isEmpty()\r\n```\r\n\r\n#### accepts\r\n\r\nReturns a boolean indicating whether or not the current node can accept another\r\nnode. Also extends `insertBefore` (and by definition all of the other insertion\r\nmethods, as they are all built on `insertBefore`) so that an error is thrown\r\nif you try to add a child that the parent cannot accept. The default\r\nimplementation only checks that the node is not `isEmpty` but it can be extended\r\nfor custom behavior.\r\n\r\n```javascript\r\n// accepts( child: Node ) => Boolean\r\n\r\nconst accepts = node.accepts( child )\r\n```\r\n\r\n#### slug\r\n\r\nReturns a string for a node which is unique amongst its siblings. The default\r\nimplementation uses the node's `index` converted to a string.\r\n\r\n```javascript\r\n// slug() => String\r\n\r\nconst slug = node.slug()\r\n```\r\n\r\n#### getPath\r\n\r\nReturns a string representing the path from the root to the node. The path is\r\nconstructed of each node in the path's slug joined together with an optional\r\nseparator string. The default separator string is `/`. None of the slugs may\r\ncontain the separator string, or an error will be thrown.\r\n\r\n```javascript\r\n// getPath( separator: String = \"/\" ) => String\r\n\r\nconst path = node.getPath()\r\nconst path2 = node.getPath( '_' )\r\n```\r\n\r\n#### atPath\r\n\r\nFinds the node matching the specified path. The default separator string is `/`.\r\nIf not using the default separator, the same separator must be used that was\r\ninitially used to create the path. If the path is invalid or no node matched the\r\npath, `undefined` will be returned.\r\n\r\n```javascript\r\n// atPath( path: String, separator: String = \"/\" ) => Node | Undefined\r\n\r\nconst node = root.atPath( '/0/1/0/3/2' )\r\n```\r\n\r\n### Manipulation\r\n\r\n#### append\r\n\r\nAdds the new node to the tail end of the current node's child list. If the\r\nnode already has a parent, it is removed from that parent's child list. Returns\r\nthe node that was appended.\r\n\r\n```javascript\r\n// append( newNode: Node ) => newNode: Node\r\n\r\nnode.append( newNode )\r\n```\r\n\r\n#### insertBefore\r\n\r\nInserts a new node into the current node's child list, before the node\r\nprovided as a reference node. If the new node already has a parent, it is\r\nremoved from that parent's child list. Returns the node that was inserted.\r\n\r\n```javascript\r\n// insertBefore( newNode: Node, referenceNode: Node ) => Node\r\n\r\nnode.insertBefore( newNode, referenceNode )\r\n```\r\n\r\n#### remove\r\n\r\nRemoves the current node from its parent. Returns the current node.\r\n\r\n```javascript\r\n// remove() => removedNode: Node\r\n\r\nconst parent = node.getParent()\r\n\r\nconsole.log( parent.getChildren().length )\r\n\r\nnode.remove()\r\n\r\nconsole.log( parent.getChildren().length )\r\n```\r\n\r\n#### replaceChild\r\n\r\nReplaces the reference node in the parent's child list with the new node. If\r\nthe new node already has a parent, it is removed from that parent's child list.\r\nReturns the node that was replaced.\r\n\r\n```javascript\r\n// replaceChild( newNode: Node, referenceNode: Node ) => replacedNode: Node\r\n\r\nparentNode.replaceChild( newNode, referenceNode )\r\n```\r\n\r\n#### insertAt\r\n\r\nInserts a new node into the current node's child list, at the index\r\nspecified. If the new node already has a parent, it is removed from that\r\nparent's child list. Returns the node that was inserted.\r\n\r\n```javascript\r\n// insertAt( newNode: Node, index: Integer ) => newNode: Node\r\n\r\nparentNode.insertAt( newNode, 2 )\r\n```\r\n\r\n#### insertAfter\r\n\r\nInserts a new node into the current node's child list, after the node\r\nprovided as a reference node. If the new node already has a parent, it is\r\nremoved from that parent's child list. Returns the node that was inserted.\r\n\r\n```javascript\r\n// insertAfter( newNode: Node, referenceNode: Node ) => newNode: Node\r\n\r\nnode.insertAfter( newNode, referenceNode )\r\n```\r\n\r\n#### removeAt\r\n\r\nRemoves the child of the current node at the specified index. Returns the\r\nremoved node.\r\n\r\n```javascript\r\n// removeAt( index: Integer ) => removedNode: Node\r\n\r\nconst removedNode = node.removeAt( 2 )\r\n```\r\n\r\n#### empty\r\n\r\nRemoves all of the current node's children. Returns an array of the removed\r\nchildren.\r\n\r\n```javascript\r\n// empty() => removedNodes: [Node]\r\n\r\nconsole.log( node.getChildren().length )\r\n\r\nconst removed = node.empty()\r\n\r\nconsole.log( node.getChildren().length )\r\n```\r\n\r\n#### prepend\r\n\r\nAdds the new node to the head of the current node's child list. Returns the new\r\nnode.\r\n\r\n```javascript\r\n// prepend( newNode: Node ) => newNode: Node\r\n\r\nnode.prepend( newNode )\r\n```\r\n\r\n#### unwrap\r\n\r\nReplaces the parent of the current node with the current node and its siblings.\r\nReturns the removed parent node.\r\n\r\n```javascript\r\n// unwrap() => removedParentNode: Node\r\n\r\nconst oldParent = node.unwrap()\r\n```\r\n\r\n#### wrap\r\n\r\nReplaces the current node with the new node, and then adds the current node to\r\nthe new node's child list. Returns the new node.\r\n\r\n```javascript\r\n// wrap( newParent: Node ) => newParent: Node\r\n\r\nnode.wrap( newParentNode )\r\n```\r\n\r\n### Miscellaneous\r\n\r\n#### get\r\n\r\nGets the node's underlying implementation - for example when using the DOM\r\nadapter it would probably refer to an HTMLElement or similar\r\n\r\n```javascript\r\n// get() => Any\r\nconst divElement = div.get()\r\n\r\nconsole.log( divElement.tagName ) // \"div\"\r\n```\r\n\r\n#### serialize\r\n\r\nReturns a single object containing the current node and all of its children,\r\nwhere each node looks like:\r\n\r\n```json\r\n{\r\n  \"value\": ...,\r\n  \"children\": [...]\r\n}\r\n```\r\n\r\nWhere possible you should ensure that the values you assign to nodes are\r\nJSON-serializable objects, it will make your life a *lot* easier.\r\n\r\n```javascript\r\n// serialize() => Object\r\n\r\nconst myTree = node.serialize()\r\n\r\ndb.save( 'myTree', myTree )\r\n```\r\n\r\n#### deserialize\r\n\r\nTakes an object of the following form and returns a node:\r\n\r\n```json\r\n{\r\n  \"value\": ...,\r\n  \"children\": [...]\r\n}\r\n```\r\n\r\n```javascript\r\n// deserialize( obj: Object ) => Node\r\n\r\nconst obj = db.load( 'myTree' )\r\nconst node = Tree.deserialize( obj )\r\n```\r\n\r\n#### clone\r\n\r\nClones a node - requires that `value` is JSON-serializable. Returns a new node\r\nwith the same value and children as the original node, but the entire graph is\r\na new instance.\r\n\r\n```javascript\r\n// clone() => clonedNode: Node\r\n\r\nconst cloned = node.clone()\r\n```\r\n\r\n#### meta\r\n\r\nStore or retrieve metadata about a node that isn't persisted, eg doesn't change\r\nthe underlying value of the node. Useful for storing temporary runtime\r\ninformation, like when you're visualising a tree in the browser and allow the\r\nuser to collapse or expand nodes\r\n\r\n```javascript\r\n// meta( name:string, value?:any ) => value:any\r\n\r\n//set\r\nnode.meta( 'isCollapsed', true )\r\n\r\n//get\r\nconsole.log( node.meta( 'isCollapsed' ) )\r\n```\r\n\r\n## adapters\r\n\r\n```javascript\r\nconst Dom = Tree.adapter( domAdapter )\r\nconst root = Dom.createRoot( 'My page title' )\r\n```\r\n\r\n## creating an adapter\r\n\r\nYou can create adapters that allow you to use the API over any tree-like backing\r\nstructure.\r\n\r\nYou need to provide between 1 and 5 functions for the adapter to work. If you\r\nonly provide `getChildren`, you will get the whole traversal API, but the\r\nmanipulation API requires `insertBefore` and `remove`. The serializer\r\nfunctions require `value` and `createNode`.\r\n\r\nYou can also provide implementations of other functions normally provided by the\r\nAPI, for example your underlying data structure may already have a more efficient\r\nway of getting the parent of a node than the API does.\r\n\r\nThese functions differ slightly from the consumer versions in the 1tree API in\r\nthat they take more arguments (the API curries the extra arguments) - the\r\nsignatures are shown here in [rtype](https://github.com/ericelliott/rtype) format:\r\n\r\nThe `fn` argument will pass you in the tree API, so that you can call other API\r\nprimitives from your adapter:\r\n\r\n```\r\ngetChildren( node: Node ) => [Node]\r\n/*\r\n  children should be an array, even if the underlying implementation is not, for\r\n  example the DOM returns a variety of array-like objects, you should convert\r\n  these to an array\r\n*/\r\n\r\ninsertBefore( fn: Object[Function], rootNode: Node, currentNode: Node, newNode: Node, referenceNode: Node ) => newNode: Node\r\n/*\r\n  If referenceNode is not provided you should append the new node to the tail\r\n  end of the current node's children instead. You should remove the new node\r\n  from it's current parent if it already has one.\r\n  (eg. fn.remove( fn, root, newNode ) ).\r\n*/\r\n\r\nremove( fn: Object[Function], rootNode: Node, currentNode: Node ) => removedNode: Node\r\n/*\r\n  fn is provided in case you need to for example, find the parent via\r\n  fn.getParent or etc.\r\n*/\r\n\r\nvalue( currentNode: Node, value?: Any ) => value: Any\r\n/*\r\n  If called without the value parameter, it should return the \"value\" of the\r\n  current node.\r\n\r\n  If the value parameter is provided, it should set the \"value\" of the current\r\n  node.\r\n\r\n  It is best to have \"value\" be an abstraction of the underlying data stucture,\r\n  and it is also wise to have that abstraction be JSON-serializable.\r\n\r\n  For example, rather than returning an underlying DOM node directly, I would\r\n  abstract it as:\r\n\r\n  {\r\n    \"nodeType\": 1,\r\n    \"tagName\": \"div\",\r\n    \"attributes\": [\r\n      {\r\n        \"name\": \"id\",\r\n        \"value\": \"myDiv\"\r\n      }\r\n    ]\r\n  }\r\n*/\r\n```\r\n\r\nFor an example, [see the DOM adapter](./test/fixtures/dom.js)\r\n\r\n## plugins\r\n\r\nA plugin is implemented as a function that takes the current tree API and adds\r\nto it, deletes from it, wraps an existing function etc.\r\n\r\n### using a plugin\r\n\r\n```javascript\r\nconst Tree = require( '1tree' )\r\nconst logPlugin = require( './log-plugin.js' )\r\n\r\nTree.plugin( logPlugin )\r\n\r\nconst root = Tree.createRoot( 'Animalia' )\r\n\r\nroot.log()\r\n```\r\n\r\n### implementing a plugin\r\n\r\nIf your plugin attaches functions to the fn object, you should also attach a\r\n`def` object to each of those functions which provides some metadata so that\r\nyour plugin can be used from a wrapped node. See the [defs folder](./src/defs)\r\nfor examples of `def` in the built in functions.\r\n\r\n```javascript\r\nconst logPlugin = fn => {\r\n  const log = node => {\r\n    console.log( fn.value( node ) )\r\n\r\n    return node\r\n  }\r\n\r\n  log.def = {\r\n    argTypes: [ 'node' ],\r\n    returnType: 'node',\r\n    requires: [ 'value' ],\r\n    categories: [ 'log-plugin', 'plugin' ]\r\n  }\r\n\r\n  fn.log = log\r\n\r\n  return fn\r\n}\r\n```\r\n\r\n## future\r\n\r\nHow to traverse when nodes may require async or events?\r\n\r\nCan an adapter or plugin be built that wraps all function calls to be async\r\nwhere necessary using similar technique to the `wrap-nodes` plugin?\r\n","maintainers":[{"email":"nrkn.com@gmail.com","name":"nrkn"},{"email":"andy.bell@informationage.co.nz","name":"andybell"}],"time":{"modified":"2022-06-12T14:06:21.805Z","created":"2016-09-21T04:22:20.390Z","0.1.0":"2016-09-21T04:22:20.390Z","0.1.1":"2016-09-21T04:53:39.220Z","0.1.2":"2016-09-21T05:17:53.029Z","0.1.3":"2016-09-22T23:26:09.762Z","0.2.0":"2016-09-26T02:49:51.794Z","0.2.1":"2016-09-26T03:11:02.322Z","0.3.0":"2016-09-30T01:29:05.219Z","0.3.1":"2016-10-13T03:43:29.168Z","0.3.2":"2016-11-23T05:51:34.400Z","0.3.3":"2016-12-01T23:24:47.071Z","0.4.0":"2016-12-13T00:35:52.164Z","0.4.1":"2017-01-17T02:13:44.643Z","0.4.2":"2017-01-18T01:49:41.448Z","0.4.3":"2017-01-20T02:19:07.532Z","0.4.4":"2017-01-20T03:36:10.809Z","0.4.5":"2017-01-24T02:37:19.089Z","0.4.6":"2017-01-25T03:16:48.548Z","0.4.7":"2017-01-25T03:31:40.693Z","0.4.8":"2017-01-25T04:15:25.558Z","0.4.9":"2017-01-25T23:28:00.619Z","0.4.10":"2017-02-07T01:26:14.836Z","0.4.12":"2017-02-08T23:16:18.492Z","0.4.13":"2017-02-16T00:48:22.181Z","0.4.14":"2017-03-09T01:45:12.807Z"},"homepage":"https://github.com/mojule/1tree#readme","keywords":["tree","api","traverse","traversal","manipulate","manipulation","graph"],"repository":{"type":"git","url":"git+https://github.com/mojule/1tree.git"},"author":{"name":"Nik Coughlin","email":"nrkn.com@gmail.com"},"bugs":{"url":"https://github.com/mojule/1tree/issues"},"license":"MIT","readmeFilename":"readme.md"}