{"_id":"affjs","_rev":"111-7d030092dedba7aae490472c51447f9d","name":"affjs","description":"minimal, pure js frontend framework","dist-tags":{"latest":"0.0.121"},"versions":{"0.0.1":{"name":"affjs","version":"0.0.1","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"0dbdd89617944672181c1c7b8cd6d9b4c1869f04","_id":"affjs@0.0.1","_shasum":"067d15a5694bab44790bdc61b6be8ca5c1123354","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"067d15a5694bab44790bdc61b6be8ca5c1123354","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.1.tgz","integrity":"sha512-lg9OocEIo2GDooC02MYRmap0filbSIwQOzJHdO4AHo3Y2LcQCv9EDlxJ9lq3TGK1A5PmMHEqtWJpTiU28Ol93w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyBgRMMEn1OoIGdBZqMtI//trpeYobb7Hby9s7mlae9QIhAKzfMePCyOQxpEN0RCIqjT6wS/mYw/0sg0kE3JbMOWfW"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.1.tgz_1481131020569_0.2152054610196501"}},"0.0.2":{"name":"affjs","version":"0.0.2","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"9cfad67f37346661374f2d279552fa89eedc32b4","_id":"affjs@0.0.2","_shasum":"a14658fbb7f0aa2515ba62223a31ff2b596f5aeb","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"a14658fbb7f0aa2515ba62223a31ff2b596f5aeb","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.2.tgz","integrity":"sha512-9sl1dFnLI7Us7UbqNZOf39Sup18zLZeuNGQv5c011+pc74+PbLO9XP774M6wQAl+vjyaIkY7kwk5AJ3JA3a+ug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEYt9RXjJG7NH9BsUIC458Jv9cFos3HPRPjVRU96xMLdAiEArwD6CYKX2XWDHwwJ1FkGWCuOl8NdyZXyMwvLyAeH+s4="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.2.tgz_1481222010880_0.7918301939498633"}},"0.0.3":{"name":"affjs","version":"0.0.3","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"76fc697e9630558f4d586637e150c1c5c7dc88ca","_id":"affjs@0.0.3","_shasum":"d3010c75a7d9e6ce02bb00be1dd6e5e0ccfeba2f","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"d3010c75a7d9e6ce02bb00be1dd6e5e0ccfeba2f","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.3.tgz","integrity":"sha512-HqLqXiEqnqaNKRyVQebH4bAesj6sIEr2PIeUMYYYQGitG3Xs9TBn7Vamd78AmY/R1mcUHw0Q2QEC9ufOjnWNyA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGovL0Ci/gzB8v6H3raaOsjTknEBfbn/XBXEHkCLCpP2AiA3NS5kV+yQR3KTlwLNV9aa4ZjwE19im3tDw7iKRYBWgA=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.3.tgz_1481288486518_0.005173121113330126"}},"0.0.4":{"name":"affjs","version":"0.0.4","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"6d8ae5c4ed11b4e84ae02ba1a97b4c18790d18ee","_id":"affjs@0.0.4","_shasum":"e2e1d13fdfeb091da0188ffcba5365b7ac43f77d","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"e2e1d13fdfeb091da0188ffcba5365b7ac43f77d","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.4.tgz","integrity":"sha512-L5A3CBWZXL5moGQO8OyL8mwb6pAHnaMrIqx1eKvbCWgWcPqzXWuv8KiqyyU19wwrjt1BCJAOuoVp8se5P31DCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDD1rsg304snD0fDmHo9QnELEwzI8uE4+AubI+CjKoTNQIgGBIcqoOLTrlAA6/LSTyiX+I4I7QrDoK1z9clwV0oaGk="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.4.tgz_1481292218879_0.9355101014953107"}},"0.0.5":{"name":"affjs","version":"0.0.5","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"af7452a4aa90c15b2c037346a1e7eb65d6287c59","_id":"affjs@0.0.5","_shasum":"38c11126a922e3b98118d84d86469958ba3f3e4a","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"38c11126a922e3b98118d84d86469958ba3f3e4a","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.5.tgz","integrity":"sha512-2uEyrc211CjjXoi4nF7FhZuHv4LzTUeiQRwNQKj43RHntyB7zYu8qq81BOdc3aIFgde8E6gPs4AqJ9vJci2P/A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSlWByoF6zwzqLd/9MMgXw1VslUP1AkOKK7oicx/FopwIhAMU9NCAwPWk3Dy6njuxh7wqN62/qDKMPnrqhvSOutkun"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.5.tgz_1481306065873_0.7883001905865967"}},"0.0.6":{"name":"affjs","version":"0.0.6","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"1338e824748ba48413e3d8979c11554ffb437757","_id":"affjs@0.0.6","_shasum":"3b6a1a3689e5535cb69bccc1960b93807ea4297f","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"3b6a1a3689e5535cb69bccc1960b93807ea4297f","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.6.tgz","integrity":"sha512-M9NyBFoB7rjPZ5gMBi15cTE2NprCPIHG7UoDw0ufZMQ9otaI4BeevZd9jxZbKV+0hDzhddHqGeAcFntSPysLTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAmS2l+uXQh4ztdjSCUe4zEHr3sIlq3PC13gYMhTVrqwIgB6J3rAi4rLRiYn/wm2zzqTH7fN3RySiIHsfbl5aZD2k="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.6.tgz_1481308823770_0.5545397496316582"}},"0.0.7":{"name":"affjs","version":"0.0.7","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"2e5a6d365645eaf73ecc76d7f872b4a90f10c4e1","_id":"affjs@0.0.7","_shasum":"0f0a72e35d56c26833ac6ed7679e9f17bc14cdec","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"0f0a72e35d56c26833ac6ed7679e9f17bc14cdec","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.7.tgz","integrity":"sha512-4r+h7QvHYeaL2uC/0fdPBllkBwJd6LcYHs6xUR42honvYKyfJ8iEDQJMXbhhGvQN8isiZ72luNka5xp9PCMjcA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8/jQlVWmITiGV6zt9j2zX9ZQJWfm+60xUyYX1LlAwgwIgdm6l1wPoDX516lWpCdXKzB2DuRabQUwfOKNTynBT2iM="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.7.tgz_1481310315838_0.36111080297268927"}},"0.0.8":{"name":"affjs","version":"0.0.8","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"6072acc7d4cddcdc63e24622d44a564ebe4d8c45","_id":"affjs@0.0.8","_shasum":"19681836220c0b50d9caef8f923a9f3cfa1b2df6","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"19681836220c0b50d9caef8f923a9f3cfa1b2df6","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.8.tgz","integrity":"sha512-hWnN//sFlL+K+yn3iziU6dbHfnd2sIgvUlsfCiDZ8pM/9c9hEJzHzoMg2Nz1fsz0DRHUons7WEIuRSexDI5l9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaSAdos/ENLCiCdGqgWmUF0awpwWwvIUvEl8McN1iE0QIhAPs+QG2Pn34MY1j3V5AhUvi7BHzgkrutoSG2mqBBObER"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.8.tgz_1481310731297_0.34681933652609587"}},"0.0.9":{"name":"affjs","version":"0.0.9","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"d19f33e39b2a8919819da49fb108ef1cd4f7559c","_id":"affjs@0.0.9","_shasum":"4af00ef5c27f49c7730bd6841b85c028956c411b","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"4af00ef5c27f49c7730bd6841b85c028956c411b","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.9.tgz","integrity":"sha512-JNhwpzqiWJf7MIjR/Y7BUVct40fukk1Lh4OGj5BpUWaJEP9DkGm2gw4tW1Aj2whRkJlTzZ6q37rZVTCkQmbgqQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCAkn45UDDI/iqTOUt4dpKONQhvj6FhxYmcxyK0VcgX5QIfEHLsZimOiOo1SC2XygSMKEOtWq/dhhU2OR6E6IN0Ng=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.9.tgz_1481351596264_0.6588307623751462"}},"0.0.10":{"name":"affjs","version":"0.0.10","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"9f0cbe1327018f63f92cf59b407852b94bf236c7","_id":"affjs@0.0.10","_shasum":"21b8854d5c9b33f7c0398689285f5dad4f9113a9","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"21b8854d5c9b33f7c0398689285f5dad4f9113a9","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.10.tgz","integrity":"sha512-UiUsMydQb7HFb5vhSlUk69X0L+m5k6h+CjXhU6cVMhv2ywxnA0+64W9bjBjg7BKK1JH5nafozsBqhOfyV13CQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdUeykbbSrputqJ18x5c1m30aEpAl8UVxF1FgZ209XagIhANO3wuVZrymMYg7thNnXq+E63LoyfXwxo6Qdu35poNUP"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.10.tgz_1481379364453_0.8417936614714563"}},"0.0.11":{"name":"affjs","version":"0.0.11","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"dc62b740c5255baf789d9e054ca699b46c2dcfac","_id":"affjs@0.0.11","_shasum":"403a56fb1d15cb57914eb2102d3e5a087c04c9b8","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"403a56fb1d15cb57914eb2102d3e5a087c04c9b8","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.11.tgz","integrity":"sha512-Wqhq2WehhkjO6WsGgGWyP741LW5ULBqeccRMOyTHpuQc6LL0G93vB8zI3dSOuMLnhw4Nyor1teVqw57AUbndVw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDLnOfsyIL1azQ/n3Y2U+FOthLMV6XyxDt07NH8mB872AiEA5QTcpnrZrzSIY6Tk4v6Nyh/7bztXgl0IHn0/8no12LY="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.11.tgz_1481380096798_0.4634843277744949"}},"0.0.12":{"name":"affjs","version":"0.0.12","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"b4bcfda6861d6bcde4bb9269c06bd8868555a80b","_id":"affjs@0.0.12","_shasum":"7c6318ee7b2e243c29f4a1c00edafd89b0023467","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"7c6318ee7b2e243c29f4a1c00edafd89b0023467","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.12.tgz","integrity":"sha512-ESkULVsRk5fSRe95LI2TVQue/me1bs2mm8qZjG9GIVhhLAAVNTlfIasfrqhvYk/f1BIM2jryGJ7a0axbtg+BXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCgxriQsTURh/x4a8H4e/qTCMLW6FLJJEmVZJlcewRYQIgP0oFDnT8ripDOwAeJvaC2XASW36hdUQxyTqiCRJBvL4="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.12.tgz_1481380688210_0.6379270707257092"}},"0.0.13":{"name":"affjs","version":"0.0.13","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"ef772ebe4d68749a66e94c29405502521479188a","_id":"affjs@0.0.13","_shasum":"19969e9ec58a020331361a9b0dbdf28723899367","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"19969e9ec58a020331361a9b0dbdf28723899367","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.13.tgz","integrity":"sha512-VjV7Y/FfL+pXBxM83vnkaLGY1GHug1wRdB07A6QEkmECG3KDpCdsJSB2SsHDTGUdjGuodiGDCBPMcQ06cqAp6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICToOGXKjbz6vnQDBxUg/b4fbJURT4wJEbvF1k9ZfpMGAiEA2/F+VoOtip6zA4Dl+3TthnuCkC4KiFtAC2nmj+2kNkY="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.13.tgz_1481395602390_0.9256845891941339"}},"0.0.14":{"name":"affjs","version":"0.0.14","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"520e931297397a27520dd1c7a868a5f740dbdc44","_id":"affjs@0.0.14","_shasum":"adb248ad7dac031fba08f0f9170b710aee82eb23","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"adb248ad7dac031fba08f0f9170b710aee82eb23","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.14.tgz","integrity":"sha512-5DUP85ehCUqlYvPenQ8KTePRgc1utp5WaiiPYRJNqfaZO2a/0i0JEwL0QamuGVup0+pmtrJWZaGIhpHp/JlsLw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlUaTPx/5IyLurfsGwho46azv7yQYYOSwHCq6fvdzs8AiEAqnXTjYRvsQM76Pfo52W4xx87+HrfxRl3uCz+JZXgqeA="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.14.tgz_1481396954935_0.8006718861870468"}},"0.0.15":{"name":"affjs","version":"0.0.15","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"831a617c5bdd4f4a9d249e58b03c74361b1b7f30","_id":"affjs@0.0.15","_shasum":"e5cd5e703244194df1c97ef27a8753b2541a9bdb","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"e5cd5e703244194df1c97ef27a8753b2541a9bdb","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.15.tgz","integrity":"sha512-sTQjRMfMxL9F2PtLvJzAGWME4cwuYdA9EIu8QI+pykvq3RB05eNDOJQXNoXqDICHdAWFVETRN0+TstmC7Rc/rg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD411bzgQN+CFp/lYJjtodLZKvtRx5S4Zf/GztWJtn1EAIgBFWROzAxWkgM1KkdQrpIhS0zZ9e0kGnAZoNZv5Td59U="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.15.tgz_1481403516075_0.7362433988600969"}},"0.0.16":{"name":"affjs","version":"0.0.16","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"139fa817f0beed07600ec8f58ca18fe5216a554e","_id":"affjs@0.0.16","_shasum":"7970b377e52d64a221806271332dd2f62b419be5","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"7970b377e52d64a221806271332dd2f62b419be5","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.16.tgz","integrity":"sha512-6X+RpB863DKF0ZWT9iVqd/6DHy5ponVSc6LZRbYoHggtRpH0iTxy/0V2lzkKZruquZz7DTISlJ3BiyerCUZHpw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICTrMQAIOmfx3Ew9JKWuFwY60ycy33wpgOSkBLSKYPszAiEAoMxIGJQ4CbiD4s+FigTsQy1nYBvH1OE16i6GIFxktQ4="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.16.tgz_1481477606596_0.7001757237594575"}},"0.0.18":{"name":"affjs","version":"0.0.18","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"bd8ee8a8dbdde10656efda414cd6c9677f0ce14f","_id":"affjs@0.0.18","_shasum":"ca7adf9412da171b49bb815550c8a5f11782319e","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"ca7adf9412da171b49bb815550c8a5f11782319e","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.18.tgz","integrity":"sha512-efALzTuizjD6oX3CCZFWPjd1B39a1HmewxPM1OMCpCHJ4psqjdsHM4M/1BdcBsJpvn3++CY+uCxq2bh7f37v0g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDz/rElmAn0CvxpHrQVon8sGf9qCA4mfw8CGueo5spTvAIgMWrau2OoiYBxz3f9wad/Po10X6kKBHmMLSLhFVgHkAU="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.18.tgz_1481482491285_0.17259406461380422"}},"0.0.19":{"name":"affjs","version":"0.0.19","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"67238bf9e5086077bb34ff6b17924affa4f9ca27","_id":"affjs@0.0.19","_shasum":"0f9abce2024553096d90631d4c0cdb256dbd89b7","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"0f9abce2024553096d90631d4c0cdb256dbd89b7","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.19.tgz","integrity":"sha512-gxtdoigGqoHqqqe4nOfUHRO2GPlArYD/lnCwdi2aTNDQ1iSiv3q4Mre7RA2Oa8cGxNyuj75DinPVelPpxngBew==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF+T1KouQrBr07cmeZxN5Mm6gqmLP4YSK7I2fR4n36lOAiEA3rd4W0FyxPsxoCQTRV9dy2bgjla+r/No9aVch0STCXQ="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.19.tgz_1481517905589_0.8231105306185782"}},"0.0.20":{"name":"affjs","version":"0.0.20","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"ecbd5add6940ecb80a4462ebce3a58fc06fee47e","_id":"affjs@0.0.20","_shasum":"cc9374592707fd1665597cfedb5dc76fc42ee5c2","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"cc9374592707fd1665597cfedb5dc76fc42ee5c2","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.20.tgz","integrity":"sha512-htId7logzKUQ2kTRc6HJ/tm0P9mkXKOV5MHRjnmU0B5eCXG2N2tqytv3RLukW2Kui5CVMISxHqKLXW6KiAilIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBkaerYoSJOkZMuBVbECO3LbYuejt7rK5oADVPnoCtxoAiEAhnjXoi9hvzhGSAJP611BU0NDcBhhJll7oJ8BFGvrZFk="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.20.tgz_1481523109476_0.32594575406983495"}},"0.0.21":{"name":"affjs","version":"0.0.21","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"32eec175d2d1cae127af6ddf457a5875fc7419bf","_id":"affjs@0.0.21","_shasum":"2be797b7fdaa9f4857837d3410488e215f0d3c5d","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"2be797b7fdaa9f4857837d3410488e215f0d3c5d","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.21.tgz","integrity":"sha512-vN38VEiSOLu5kfP1B8+ZYpPeEGomZB7zwZqbODON46QMNrzViSw+t0Q323zeIapILm+7PJ9uQm3Z/vK4agHKbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdaPptD3qqza3NI845UGqQtvGH/WJodsFxSxxBVJcVygIgb6mnOETCvZ0NYKD0LgzP4ALDtWokmES9rYdvBJwbsi0="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.21.tgz_1481546315105_0.8490534008014947"}},"0.0.22":{"name":"affjs","version":"0.0.22","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"6f3b620f653ca3e178e384c24c79cc78891dd080","_id":"affjs@0.0.22","_shasum":"6661bf36bf92830ddc78f64dec43c9f9e50754be","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"6661bf36bf92830ddc78f64dec43c9f9e50754be","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.22.tgz","integrity":"sha512-1UDRcuJ+0aGg4Jh46PihUVLaBDrLHLYzhPbv+txMzOB7Sw/6w19oyyxYImWEP72fruMF1SWva56Gark/ws1F4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1785QrfcCr2uGidteLtfzVI+4VdEzd7COqoQPf+RfbAiEAjBXe2/6rrGkDClF0HdKcOps5h4bcBhvnt89yzf2buIs="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.22.tgz_1481546490135_0.47940716752782464"}},"0.0.23":{"name":"affjs","version":"0.0.23","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"b3853c04b9c9ddfbc623a8283bd039635d188de8","_id":"affjs@0.0.23","_shasum":"a343d92e18176752b91440c1b2f3ed03b99095a9","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"a343d92e18176752b91440c1b2f3ed03b99095a9","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.23.tgz","integrity":"sha512-cb2y4+qO+1V1RcOhRTCm2J/n3oAdB89emztt84vBzZ5frCy717g7RtLm8qdMtlNn/V7K0lLFobA/ub2wb7nFyA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA+z0CkhrsqJDBXQiaRLQsL7FLKRrTEGrqsCgVOjkafhAiEA612EPTofV8S3cK0MtgQdP0j7FwhHUa7qSgdAxHySzAQ="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.23.tgz_1481546597853_0.2638169154524803"}},"0.0.24":{"name":"affjs","version":"0.0.24","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"d9ca204956d97f162b34273e15208aa2b1c1e641","_id":"affjs@0.0.24","_shasum":"1f3e85330a472c223e6ad8667ca311bed456f7f1","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"1f3e85330a472c223e6ad8667ca311bed456f7f1","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.24.tgz","integrity":"sha512-reRuOl82iJYtaOFPP/uSd2ATJ4wxXWpC64ol9x8nxqfiThWN/V7I5Me55MrBiTcz5nFC3cF5VnHGfbi1CCErYA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKkrvGxeMZtfhKzm5W438A73nZgw1OgFwLoJuP1YJzdQIgENubdemTxS6Xc7Pm3tk3962Od9AsKGlFUu0EucO/FBI="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.24.tgz_1481572876514_0.3205189493019134"}},"0.0.25":{"name":"affjs","version":"0.0.25","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"d0c6db236c980a217d461f66c5ff030c357e82c4","_id":"affjs@0.0.25","_shasum":"635bb771cb112cceeedd824d45693cd9146b8295","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"635bb771cb112cceeedd824d45693cd9146b8295","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.25.tgz","integrity":"sha512-vviEtJX6xLO1dgT3XPiqI4bPeeShUCuvDWbfy3b2Vf5vppcWN47jU8j8IpSV6oDU94WrJajk6QFVYk9ZnjJ/JA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwyfTAcoi/sVzraLvgNHxRT+ojFeYclqbRiNoxEhxVCAIhAInmNj4CQ3HIeINGFAri+jl+IRHH2+hHnTie6Igl1JE2"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.25.tgz_1481573386200_0.3775595484767109"}},"0.0.27":{"name":"affjs","version":"0.0.27","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"603c20a6bc0654b62593a0a2f94c4ae08f50586a","_id":"affjs@0.0.27","_shasum":"007631b419f7300ff4208e7a2f1824ccfad29c5a","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"007631b419f7300ff4208e7a2f1824ccfad29c5a","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.27.tgz","integrity":"sha512-DRQoKH7TJiZZMk0B2lXpLhUpOGe6y1XekOuxpyyKvN1hCxRPCGnAtIpD8sLygN5tkmCP8bSOqfxC8mKRhhnMrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPqd0FSWC0eaI6gYwHOEKLsKT3AzlqO+aH6YVaJqIvcgIhANrYaY8X232UTC9BjnFSc4hf/Q9jdIuwdhxQ6lROO3PR"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.27.tgz_1481576940321_0.0740140457637608"}},"0.0.28":{"name":"affjs","version":"0.0.28","description":"minimal, pure js frontend framework","main":"index.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"24e2248c83262015a220c081dcf8f208deba1f28","_id":"affjs@0.0.28","_shasum":"67d2125ce99c2e7d10ee4499798a6a4cec480998","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"67d2125ce99c2e7d10ee4499798a6a4cec480998","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.28.tgz","integrity":"sha512-Xb7GqBl83iXlhREEcqnhXwm5mIMXR7Bh/pYxVaOR3E9WodTcqmgv0iuTFlDkpA8rscGjlKXXFVVlzmV1FGfe5Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKKWRFhHQzZXB/k49iYOTlOEyQcWY6qt5/E6WXEwMyIAiEA8rnrQFQwd7NIMSHYBsoGUop/wWkfot+Tlkz2iSxp788="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.28.tgz_1481610739480_0.7641842488665134"}},"0.0.29":{"name":"affjs","version":"0.0.29","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"c243d7e60f35591eb10d7f7e4393301290892299","_id":"affjs@0.0.29","_shasum":"9939586e18ad92113f08bd6cc046a64d083be891","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"9939586e18ad92113f08bd6cc046a64d083be891","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.29.tgz","integrity":"sha512-jw71AUrBV/Cc4gJVs5P77zQ7XK2jzs2AhZuA0JZiIxXdXAeL2qZS/OeXEn9/hoqgdhPuCthnnk+q3JaBQJTQjQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGkWhXQWCG+SwgXw11kfOAm0cnp7qZ9dO+w27enhVPfsAiEA14DWxRz4+kMhqEQvUN9yHDM6BTgGjfSpSeGpToIjl7g="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.29.tgz_1481611412430_0.7302400777116418"}},"0.0.30":{"name":"affjs","version":"0.0.30","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"993e5da16abe60785297a935130eb7780d395630","_id":"affjs@0.0.30","_shasum":"57fadc09ee41ec36b1d5f08129878ca93a9744b5","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"57fadc09ee41ec36b1d5f08129878ca93a9744b5","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.30.tgz","integrity":"sha512-ZaLAbvQTv36iusYOBmqss8fTxcxjo+LENA+a9s/dqp+9L9Yb9osR83wr+k0TUE98d5/END2VwW75aeJn0wNbiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjqJHZNiuv/95egyiKSao5wsOlRteiSaWVy6BhIydmBAiAfF3Kf1aMOu0Qw66jaHXsKrcXGqeFMU1pW4/c6IHTj1Q=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.30.tgz_1481621056385_0.8738775104284286"}},"0.0.31":{"name":"affjs","version":"0.0.31","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"2c22b427114f8f58cafac8ff15f2d269e0319e06","_id":"affjs@0.0.31","_shasum":"194470650b7e312ac27ef192b6affa50dd81dda9","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"194470650b7e312ac27ef192b6affa50dd81dda9","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.31.tgz","integrity":"sha512-Tu4MoIsildv7v37clmx3nlnSeUNcZ5M9oJS0QOh3zObHaut/U7bbBlyt/aNElmtnatuiBsI4COFV04l64u9aTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmmESLhiw6TzPPW6TGz2nCxaGS3nXvUUAWfHfu+SjeGAIgNwGKiDU383WBf9nkfZXbE75w2b+7YLGrDGs+/UrMJZM="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.31.tgz_1481660471299_0.9626468464266509"}},"0.0.32":{"name":"affjs","version":"0.0.32","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"5305270d6b65878644951eedadb21eba762f3c8f","_id":"affjs@0.0.32","_shasum":"4fe4cccb8e56c37641ca68b9691549d4a9d41e08","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"4fe4cccb8e56c37641ca68b9691549d4a9d41e08","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.32.tgz","integrity":"sha512-2R5mXwhTxqUr3LaWscflT2SCagwfB+GfVFheuNnThUIj/JsV+1xjM5DiSlu6yKjvGSFYokXs06ZoG/s3GB1tpg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID9xsO3KgTQrLzp72/nUAgJQMHw7BRxIAh8KwUDA032FAiAjZXZ6F49P9djDG3KeIO4lqG+4ocI1dhjyR9mPQpu+oQ=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.32.tgz_1481694444893_0.3234061491675675"}},"0.0.33":{"name":"affjs","version":"0.0.33","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"3b3e87079a90cc7c6e774f139609ec9664287df1","_id":"affjs@0.0.33","_shasum":"c0a63eebfcb73537240cd5ae967927dd7d959087","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"c0a63eebfcb73537240cd5ae967927dd7d959087","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.33.tgz","integrity":"sha512-ZBtOIqShdGNBOUdZtHrVRYb4eF8czjdweL0etDb+wVG7TlXYO0R8MhOXiCdyD6ec6GhY3Eh1y6MyxEKmG83jYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcIBJif6OgLsidWd6PRbgpCAlFFsIjHk8nGSHEqz/TbgIhAN6dnrSpdBYT82HtoU+hESAOVydFhD39WtOZqVlbvfDO"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.33.tgz_1481724409111_0.8849706123583019"}},"0.0.35":{"name":"affjs","version":"0.0.35","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"356c28362142727b0feb91e077a78dbae650dafc","_id":"affjs@0.0.35","_shasum":"6eeb26f8236f69a1b0ffb624275cb5cb18e432a4","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"6eeb26f8236f69a1b0ffb624275cb5cb18e432a4","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.35.tgz","integrity":"sha512-C3RA2yGPWfmgmbnS46Q3mAU2uA6fMiNK7aSveiH2x3P4bM10kB2UG+I3joKcl5HgI0eeXgVR6iWIjktyeAZy5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSKpLrJTLilgTVrNSkseukELbp7rQylvvI/2UbGW5cGAIgN9d9bu+cey3jG0f5FxMqMWQP/lchwWUnV+xS0iUe4WI="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.35.tgz_1481779053906_0.13631796883419156"}},"0.0.36":{"name":"affjs","version":"0.0.36","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"909f0463c497c7852ce28da1d0b383b30fd63a47","_id":"affjs@0.0.36","_shasum":"4aa989330eed3d4f8022291af1fa75832532d5b9","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"4aa989330eed3d4f8022291af1fa75832532d5b9","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.36.tgz","integrity":"sha512-E54P5JZgC5lzsXEOHtdZtbpRf2HOi5PjjjvKA+9TMMDYI19Lx9wlkrrbCwqmNYSHkNeobOAFxV8LCyGY9wPTlA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB7RStnjFEgwvLC9XTmbp4tbVTtjCnWeYaetPd7qju6AAiAyUgG0kM7fCwJyHp0VGF+12G1CBA8yAH/Hy7t+a2p8Gg=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.36.tgz_1481793683157_0.5412490600720048"}},"0.0.37":{"name":"affjs","version":"0.0.37","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"3b7e9429186e3e5444f4f15c9ea498d6e3b1a9e9","_id":"affjs@0.0.37","_shasum":"fff5517027b0b2a22642c0db473c4f09b3a8b41f","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"fff5517027b0b2a22642c0db473c4f09b3a8b41f","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.37.tgz","integrity":"sha512-5i7m4nsBpDofvuE4CMJqEWlfzOWuLy66wlyYG6AdyM12XeX47iWVH76+eOtI24K3hCra8HTrwnTvUCaUY7KCSg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDaLwIdNQyyqYhSdVBI6ATB5ex12A1ApnbSxSsnfUp2yAiEA5KuIWeiLFrmH9HVLOfT6+c8m9JxccQ87pO49ro3f7Ws="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.37.tgz_1481796081317_0.6839280652347952"}},"0.0.38":{"name":"affjs","version":"0.0.38","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"942c63121222b0b06b22112ac5ce1f544395222e","_id":"affjs@0.0.38","_shasum":"bfd90da83d874f901a426d29979a2fb8d0d0ffbb","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"bfd90da83d874f901a426d29979a2fb8d0d0ffbb","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.38.tgz","integrity":"sha512-28l31eyRVd2BDMqIzCqpX86GEXXgaUhzpj7aVBYuh1MTa4I6toTNm9PBjj0VQFlMY+3Jh4/Alq/jWl0dl9Ynvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA5Y8Z9iINUSfBddVyE0POQRRxvUjETrQHtOu/UnBYSwAiAW54kygl/8a9riXsV+RftNdhD2KHf5yhXboUKhvR6wqg=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.38.tgz_1481797684461_0.8647917555645108"}},"0.0.39":{"name":"affjs","version":"0.0.39","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"6adc9ac0f57f6992e771f634dea6a200555931b8","_id":"affjs@0.0.39","_shasum":"0cfb5e82f70742f557d9ea9a7f3b4729520524b3","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"0cfb5e82f70742f557d9ea9a7f3b4729520524b3","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.39.tgz","integrity":"sha512-KrfWycf3yjLZL+75dJsLjGx5S0m+1s6Ubz68bIjZTeCM6F0aPrhx2jMj2NbWQX4c/0baljj0TNr+fhke0S5Ilw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFVq1lL2z2aMtY7nwzKOXl7+eZJ9kfpNIvu5+M6zh2XSAiEAztbNgAwKwUTMxfJRFmlZWulpkvxn09uSVhl7Lm9gwwY="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.39.tgz_1481822285923_0.290416399249807"}},"0.0.40":{"name":"affjs","version":"0.0.40","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"372b5720321fe03448ce2435b73ab2acd6c09034","_id":"affjs@0.0.40","_shasum":"e6f6abcfd424a496fa49c80b488f509f7c8683dc","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"e6f6abcfd424a496fa49c80b488f509f7c8683dc","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.40.tgz","integrity":"sha512-jf93Ry9CAVuI0AJgaQzXdd6eQqUySnVVANK2RDMYU8oX8Faohv1n1D+YZDnoiduwi/KoQLUsrVev/Oo2p39qEA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDsAl0xINaegJPXrGbFlfT4oyd4eoLORVxG9EVqS145+AiB+aOnhD6V26qbn7x6IrMDmviFokO7ARomIOiSswcv1Mg=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.40.tgz_1481832409655_0.12390840868465602"}},"0.0.41":{"name":"affjs","version":"0.0.41","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"c27851011ee713f4ff619dccc0aaf69bef78db9f","_id":"affjs@0.0.41","_shasum":"5f2fbdf7755f6ed2e76b1a1b5ae91d400b9da50b","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"5f2fbdf7755f6ed2e76b1a1b5ae91d400b9da50b","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.41.tgz","integrity":"sha512-Bs2dbrB3eaLw2v5/kniFxesVHVnFgEN7sT4+DxM0Hgvze7Fs19d605Bjq7be/rRAErOgk5s+1IuZHY25RSexjg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKJN90bMKii++Ul4YZBGKKzx9069DxDUxSl3dS5v8XQgIhALOms3Q3EB+z3KaWMyXI7b5cTvVDACJJgA/1alf0NP26"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.41.tgz_1482007400235_0.49698264547623694"}},"0.0.42":{"name":"affjs","version":"0.0.42","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"6d423c549184db68427863f795bca859abdf4eb2","_id":"affjs@0.0.42","_shasum":"76992b8aa4df178cdd61b89b79a4f09deed0fc25","_from":".","_npmVersion":"4.0.3","_nodeVersion":"7.2.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"76992b8aa4df178cdd61b89b79a4f09deed0fc25","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.42.tgz","integrity":"sha512-g70UZzKjVSkv/Dz8+2LsV02GTD1kohfANwXoZd9h/BLCeKI08Vgsrkc6DezV6bZSzOakeWa3kTn4sY098NUb0Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAMcHxYb+RkIizn42WUMlgizsCk41D9my+m/1idtsQDiAiEAu9diqEEZfK1QQ4qXr1jAy+piYzqzSiAms696LldIg7w="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.42.tgz_1482043907503_0.6730141108855605"}},"0.0.43":{"name":"affjs","version":"0.0.43","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"0eeb9aa64259fb8376008bfe9be5ee4f9a7eab86","_id":"affjs@0.0.43","_shasum":"98fc4de0ad2ac31b47caa9d6ea39ea7fa7d00314","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"98fc4de0ad2ac31b47caa9d6ea39ea7fa7d00314","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.43.tgz","integrity":"sha512-NvOV38nkkCmrDUIdeK2tszKaDdV18U5IV8KtpJELQVZJ211LhsQn6MrJS0cPQeUjnyTcpULI7wVNv8OK9gpfYA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChjPhRw14ykZCFqkJhKu3iOb/9U3xn6agtu/ya1px2qAIgbFuARA8ilbMHWKRyPyGKubIvymaO5L0UQZwjlO93y10="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.43.tgz_1482140873898_0.6851532971486449"}},"0.0.44":{"name":"affjs","version":"0.0.44","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"02b698e91acc0003cd063122152128e0ac29668d","_id":"affjs@0.0.44","_shasum":"ad442312cb19827d8ddf8ad5596eba14ac400287","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"ad442312cb19827d8ddf8ad5596eba14ac400287","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.44.tgz","integrity":"sha512-SXacjZfdNIQHq0OA7yI4/9F2dMkBYiBkwcy0XoV/aNbQRmfQrSNh8LZaLiSFElVIXSQUVgDMF4+4cc4HhXV31g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLeY2JQe8d+ofsutNIMXC0ug6w67hYlIlBn/fM7bqYUwIgWjaVJLVD/HBZVf7Md5IfzJ07c++hZlYO+bQYVG6Br3M="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.44.tgz_1482147286581_0.16940159164369106"}},"0.0.45":{"name":"affjs","version":"0.0.45","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"d242ba49e5fdba476e1f773d14d3679eb4602b13","_id":"affjs@0.0.45","_shasum":"50bcec306c70e6c695b5cbd4157ea25983d33fd5","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"50bcec306c70e6c695b5cbd4157ea25983d33fd5","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.45.tgz","integrity":"sha512-0DHzC9beCuw9NaAbrkTZQZiC6SRFlgBQJGpawLNIuLs/HdSEIrPmLhlwFr65etrArQL7SE/3+ZShHyfHO0yeRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtQo82QVSy1jy6uLe+x8WR7lPYnJ4iXn5JGgJsEMcABwIhAPE98CouDAeki1ukfCWCqbPlix2A6XBoSz653UGZoQxX"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.45.tgz_1482152071734_0.7215866802725941"}},"0.0.46":{"name":"affjs","version":"0.0.46","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"ac7bf09f5fc80575d2a9bdf60c5e2bc39cb9af39","_id":"affjs@0.0.46","_shasum":"ef2554fbf27c521e79ec5e4118e8aa357ca6b927","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"ef2554fbf27c521e79ec5e4118e8aa357ca6b927","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.46.tgz","integrity":"sha512-b8w3StyyViG4LG0KlSKnFiSm2XmZ0cQm4XsqBgATMgSi1E5+g7fBElwAlVlTB8R3N5WycaTPQlo+atFSxU+mXg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJZLUhXwU9bpweVHs0FFPYhf78VblkS4JQ8JRUwhB3bwIhAKGDc/sbZsUfu+agsg6Fe4uoYHTBrkYgbSk2xl6NN2RG"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.46.tgz_1482152581143_0.9322064162697643"}},"0.0.47":{"name":"affjs","version":"0.0.47","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"8a26e03e3ed924c9c7d086093e89bbe5ad82fd02","_id":"affjs@0.0.47","_shasum":"38f4e80e6785795cd634ff1d1375c070a303510c","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"38f4e80e6785795cd634ff1d1375c070a303510c","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.47.tgz","integrity":"sha512-AXwSvh7bteNeoHUh0eqkMlgpkJBIiEjzvtXmgbwfG3vO4Kn1SUpTK/P0dg/tod7w6EFCei0Za7AS7+EnDLd0xQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHErXJ8451FmjfBDhGb5GyVZ4s4tJU5YznXj7iItuMABAiEA8KXN9+nq6BESTBXXsGmwBKqeNkN+4U4Jwyx7pV9GMxU="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.47.tgz_1482154123797_0.650187186896801"}},"0.0.48":{"name":"affjs","version":"0.0.48","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"8e377af4bf75dfe5ac292c5e56fae8c486950271","_id":"affjs@0.0.48","_shasum":"6a98cec6e9677eea5a7e1d9617570b03287c627e","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"6a98cec6e9677eea5a7e1d9617570b03287c627e","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.48.tgz","integrity":"sha512-kaHdkw1+ksobT6DUqz15rYUJ/5LSOIlZFqi87rJxRCekqg7otlabsOIyaQg8qVYpFX/ILkfi6rdXI8oFaE8cJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC4/cKYLCpYLEN0Iy6IKT4gtbVqHkp6b1Js6nSi0JVQlAiBqXIcvzuz0Ac0Q06B+ns9julmW+wZ+xGheDHzclfb/ow=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.48.tgz_1482154945344_0.5625741344410926"}},"0.0.49":{"name":"affjs","version":"0.0.49","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"6ac70f3410803694bb34a5febfbfe74c263bad71","_id":"affjs@0.0.49","_shasum":"f597bdfb82fc66e583b20ecc9801b6ad08d7e9a4","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"f597bdfb82fc66e583b20ecc9801b6ad08d7e9a4","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.49.tgz","integrity":"sha512-r1KqIiCykmbOjOH9aMDEkmjchV++iPloqabbsdFSOHh/H9kesNvWvJPx1iumnNDRxic7Xzwmly6QFv5Xdk8CQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAgB4/bpSZ10uRk4ftjTsUV5WPg5y4AeFxmCcJR3WT0bAiBOiHARFAc/KUAQqI+zrCi7lPRgv3oA1GGuDU7dl4ZPqQ=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.49.tgz_1482155614784_0.02726858016103506"}},"0.0.50":{"name":"affjs","version":"0.0.50","description":"minimal, pure js frontend framework","main":"lib/affjs.js","scripts":{"test":"jest","dev":"jest --watch","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"gitHead":"4ac9c6dc51366d19b326c31214ea7845641a63a4","_id":"affjs@0.0.50","_shasum":"6f1b9264824e0bb615a39b25403108016c8a4900","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"6f1b9264824e0bb615a39b25403108016c8a4900","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.50.tgz","integrity":"sha512-58La8LsC7EZrploFn+czu8oDDjfpadKsh48lj5Sikd4seXq3EWbbD/v8tf8raS1xmLyGpPXq5NP/DSTw97U8pQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBC531roACV8Dx0Ib3Vl7HxWmyS5Gg1yF+jmQ5DxFkHjAiBV1o0UDRWrafepEoDc76UoE53/ZvfSC91/0EXG6toQ2g=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.50.tgz_1482157131086_0.0991138641256839"}},"0.0.51":{"name":"affjs","version":"0.0.51","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"2b9b5927747f7978f92d39d8d150cf1daa466a29","_id":"affjs@0.0.51","_shasum":"ea5b9dd3fdcc5ed6ffc7b563261d0e124d5af267","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"ea5b9dd3fdcc5ed6ffc7b563261d0e124d5af267","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.51.tgz","integrity":"sha512-Oo0ZmXer6EC4H2VURTTLmTFBz8+P/xUyfAqUp6yKBolB1Wgl3uc2y9POVWbibvn3fbGBKTGIL9oScci90ZoJgQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPAL1X2B2dSsy7HqlvATzZwwrTNcr4xZSyYdLoKDLseQIhALuKJ8zj5dOVpk7/oX6eYPSAq6DRUZPiO2ksqCO2b2xY"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.51.tgz_1482215579640_0.4413596475496888"}},"0.0.52":{"name":"affjs","version":"0.0.52","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"7bfaddb593123964f9ed4b10ddd983ffea65aab3","_id":"affjs@0.0.52","_shasum":"83228ad9ac23120b810f8c95833595204203470f","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"83228ad9ac23120b810f8c95833595204203470f","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.52.tgz","integrity":"sha512-OHQDHjh+X8tCfi6tun94mB2ibATArCOz5c/HLzvKJ76RXmndPoHJGmgwDw4f8gj1PiChy4R89RrQNZ4uASRavQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYhAJlneYSoQbe7OSFJuL5kyFxLfej4prVSQcXGHCXcgIhAIY9JO0h/mygsMs7sXL9FrZxWBgbCjIUMjSaxUx3o3Rm"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.52.tgz_1482225646656_0.3454883813392371"}},"0.0.54":{"name":"affjs","version":"0.0.54","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"4de29b0d43e690aa23bfd7a957473825c1925c68","_id":"affjs@0.0.54","_shasum":"63c50dd40f5915d804cf9866c66592e743eb3f9d","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"63c50dd40f5915d804cf9866c66592e743eb3f9d","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.54.tgz","integrity":"sha512-n1zBA3lJKZVrwixpyoVmc0VXiGtXvM6eSGT/Yk7K5a3es8FovAsdxGafm6kmdJcpvmI1ULGhVJQ25Pk1zoKC+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGbAlAnw8TTlZACY67dObVw+ZxaQhylhDWChkUQzxqZcAiB9EXZ4fj+Uj39cQ/O91uQdnzX6kq9ovJOsqN/ilxXDhA=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.54.tgz_1482312432302_0.6066412264481187"}},"0.0.55":{"name":"affjs","version":"0.0.55","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"2fd898b607c793eadf3c3b77732ca214557a24b9","_id":"affjs@0.0.55","_shasum":"75cfc7c88c35272e7a07ff68262be87220d6ef9b","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"75cfc7c88c35272e7a07ff68262be87220d6ef9b","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.55.tgz","integrity":"sha512-WlCJPkVeNXxXpNmVRHl22ajKVvJ4uQTuWcdhLw/LUZbWcKceHNhsenhhKUZnbw5bQPDGjm9t9q6j/MaTx2qVHA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxZ88lzQulW+uE5ya26G3wV+xNuHzHvXk4EuqfI7bnuwIhAMuVCVnB0M+zaIL+tS4OlFsOIiOQd03wiGntf+/zzDRA"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.55.tgz_1482316068818_0.33169099991209805"}},"0.0.56":{"name":"affjs","version":"0.0.56","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"b03e3160a18787854b5705e5fc4989c0cbe23da3","_id":"affjs@0.0.56","_shasum":"58692f269d84568a12787707ef4feb899329507c","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"58692f269d84568a12787707ef4feb899329507c","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.56.tgz","integrity":"sha512-frRVnwfoHKAu6DK+0Wev70nQ2uMw6RIExYNKK/oMsHLluSZiSziMq3nDF6Dm7nj2L8PQ+s93EEC9YD+djmQ/ZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSIgS4jjW0MgoejuI/178ZDH9Z7fiAFF0UAJ7chGXvXgIgE1w9sjoOSBAyQ6TDScmXuetiLc9MSoJoOrouvsBqpuk="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.56.tgz_1482316400412_0.7321182223968208"}},"0.0.57":{"name":"affjs","version":"0.0.57","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"f9097d68bfaa69044e9ae767ae61c950ee0c24b7","_id":"affjs@0.0.57","_shasum":"d7f29197fc0edb2cd4346070cf3c5930e6f5642e","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"d7f29197fc0edb2cd4346070cf3c5930e6f5642e","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.57.tgz","integrity":"sha512-XHiJAiTfG3VDIGlMdQVUZlm7yCkNQX2E1FjLSrdCbYpiV/9ByN0ueXGlL3vw1m5zNaD+1qt8tC15w2bjfjo8Gg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeLYiZ0MuZ2KZwNYQo0DeFreRjwJV8Q91CbPMvou5DLwIhAIqm3q1NZD7ISeVx0L06TDRbK6ETF0/AKHCdk7JS/pjY"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.57.tgz_1482325289228_0.655470302561298"}},"0.0.58":{"name":"affjs","version":"0.0.58","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"eb5192158b3d79d8393084e7b7c9c6d501171157","_id":"affjs@0.0.58","_shasum":"17a58e09463882bcf51358249e248b2b68f9dc6c","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"17a58e09463882bcf51358249e248b2b68f9dc6c","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.58.tgz","integrity":"sha512-QwyfcHJkittYOL9kBMxflsndHJYrB/FSnCmWNF2xzkggQrhEu1HYgipkY2odC070T8jjfND2wOiDHCK+afeisA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIo7QFf+3sn2FoJ3Xr/n0iLVj4TuvrHzmGmowfOgbvfQIgRB3iGbFBGxBbcxPSjlanTMDhcKDEiJZDzNZ08AVl3hk="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.58.tgz_1482326552537_0.6075200976338238"}},"0.0.59":{"name":"affjs","version":"0.0.59","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"7eab374fdc65142893bafb9574c4695d743cabd5","_id":"affjs@0.0.59","_shasum":"f4e487fb2110c9038327331e680801993d055926","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"f4e487fb2110c9038327331e680801993d055926","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.59.tgz","integrity":"sha512-5nVZNQOsEk7Cexc5k5dM0jldJNpyz51Y6oEUqzaUBu+tuxVxlwdnL0prTWUQhctAn+pIoJf7ph7idZ29T7UiYQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDl3J1ddkTH2SHBjjkuEeWQKTI8GIGhBN4gBWmh4L7lkAiEA+evIzJeIGXwqOWNJ/RlVQ4KiDFL9niEiWPAsuHSoLaE="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.59.tgz_1482329403456_0.979292364558205"}},"0.0.60":{"name":"affjs","version":"0.0.60","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"31879202b9d222729d2f38b481d1da372eac5d32","_id":"affjs@0.0.60","_shasum":"17d69ce835a36f1ed04126b43bca212437ef8b58","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"17d69ce835a36f1ed04126b43bca212437ef8b58","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.60.tgz","integrity":"sha512-ObVTo2mGcQ3gam7ulpYas2RJKQTTNTlAMAijG/wvqafv/S0x1WLMu/kt2eQc+e1aUur1Z5uxj5ffmeGqOa9dSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHOXSg8nWN7YX5yM0gRRdRFbK411NV2obneOM+P7muAJAiEA7vFHmu5R65WAAwKaQBFfhwqnt3VB3Z7JUpVBdJDZPB8="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.60.tgz_1482338085091_0.10718671651557088"}},"0.0.61":{"name":"affjs","version":"0.0.61","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"88ec614425b8982745cf3bb5523a15a64648d236","_id":"affjs@0.0.61","_shasum":"06f4d424040508729576abc3cdb3a2103fa3b55c","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"06f4d424040508729576abc3cdb3a2103fa3b55c","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.61.tgz","integrity":"sha512-YRp/D5E2jH7BjWVkfT3FKA8SENjWLl2ooOf+KtN0vP8Lbgp/RK/X/Q7JSq9dDVygyY6w+zSD+ocZQghI0icStA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFeeV+QWs3ZxaPTsSEodIme1UxrySUPMCctNQpfgIdMbAiAFAwunudv9iZn4RDljX1845GLnsmsy1oAJKe98DRqwoA=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.61.tgz_1482388583242_0.39637166098691523"}},"0.0.62":{"name":"affjs","version":"0.0.62","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"4903e8e6f68ad91cf46b80ebf4f540f78d341653","_id":"affjs@0.0.62","_shasum":"cf1dcac9f169f46f1c9d00d13fdc5c80d2c5be15","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"cf1dcac9f169f46f1c9d00d13fdc5c80d2c5be15","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.62.tgz","integrity":"sha512-GRO1tXCwrCz89HWjeFFMTZbYweQEadDe2KYnIqnoMLB5BrPHOj4Jf/Zxa4Cjs7pRuzkKlNVnlqArjSJspNDPUw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFa9cEueoWfLRWzQ80775oazqb7iBZ5KxHgRhi7ormNRAiEA4YyYIS2rhV2ooyDcH7ciAoH0U8yah8nSZuwOT2o1KNU="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.62.tgz_1482417552774_0.905602210201323"}},"0.0.63":{"name":"affjs","version":"0.0.63","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"2bef96217bf04625a38a0035387814370551b3df","_id":"affjs@0.0.63","_shasum":"b7d8f40d75944b5c5f9b5962e9b95898a83df93c","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"b7d8f40d75944b5c5f9b5962e9b95898a83df93c","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.63.tgz","integrity":"sha512-64ChOWESboZ86DQq0oAyziQcuUvGdrNNInCrY8tg8LB4GGH5mJVyOKQGPK35vMtOL7I3WZ+1Pgc8chnpy6UePw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFe0bu27OdrYMKf8BgoZuPeKMmwmJLhYrLm8L2paA3bkAiAVXWi+Pfgf6sEf16kIRGCXRnFdEcDL6RLdocv5tbpgCA=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.63.tgz_1482441277613_0.39954276545904577"}},"0.0.64":{"name":"affjs","version":"0.0.64","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"73a164ba704bcf056ca96fa7974f5e0b2fe062e5","_id":"affjs@0.0.64","_shasum":"98a9b2520a70224d761e3f342b8aa782800bcd14","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"98a9b2520a70224d761e3f342b8aa782800bcd14","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.64.tgz","integrity":"sha512-LUxAvaQZjS3nlvKrW5yrq0HIaQoV3sbWiUM4AISbIAuMj743HRZwLoQYCpJdF+2oUgSykR7JJuwQXnPcy/F7+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDceCyM1V8OOnBFgl11Lj8mZgx2DbNKp46TsToonu7qpAIhAKoMyTwAtOEAvUtzgRu83YQUBtdPzMtLu2RQYSX33HEM"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.64.tgz_1482499479118_0.6051757927052677"}},"0.0.66":{"name":"affjs","version":"0.0.66","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"3d303ccf79bbb95b29a45d67659e9c0498f0d398","_id":"affjs@0.0.66","_shasum":"0cdca80da3cfc652d80b57d175d8755ecbe5b1f7","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"0cdca80da3cfc652d80b57d175d8755ecbe5b1f7","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.66.tgz","integrity":"sha512-NXcqdA2cq5qJ146IaHDT+5SW8qeSgimsiuBdW4H4JCqPQzxBW1kfZ2ruTjyirM3C+rpHKKbjHE4BlcJ9yNjROQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEL06KrA5Qe3g4vJSE4UWMwo36v+g/riiEQSNHhH6EI2AiEA4imXlQVhVZvJOGs70WVW1FkSQWo8OZn2NEps5/bBNZ4="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.66.tgz_1482577987632_0.5210653573740274"}},"0.0.67":{"name":"affjs","version":"0.0.67","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"aa31963b66152766eea41fc2f69162a36a8a0eed","_id":"affjs@0.0.67","_shasum":"7c6e8d470d65d0fbf5976ff31119863548013b05","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"7c6e8d470d65d0fbf5976ff31119863548013b05","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.67.tgz","integrity":"sha512-CWlGeTfFasvmy53w3mjCNok7z1uULpSyFqqbpJ/u3To3oI8WyPqzjF0ufDOob7Jcxy5clXehVN9uC/GDl4JXrA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIHStS+qNlvoo6xi8Fzilo+2Otru3tOBP2cDBF2/0z4jQAh9A1yb7JKbdWELShCbHsM73rZSnBb/TSBtps7S2u5Js"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.67.tgz_1482586584943_0.15618419274687767"}},"0.0.68":{"name":"affjs","version":"0.0.68","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"0ffc9cc4f36f077ff313f330444eaf6b7400d35f","_id":"affjs@0.0.68","_shasum":"ec4e1781b8487476b3c4b1a86da0472b18be984c","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"ec4e1781b8487476b3c4b1a86da0472b18be984c","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.68.tgz","integrity":"sha512-sJqdxVO4PZ72H1j9X1QlRTNTBcgb6hESpJgsMzhYllIOHEIiMQg1IhJ1n21Fb2X5443C4zZOGq9BDrNo0m/lrA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFk6rd/H8UHpHKqSxUOnCcUjBSdBVSMpp4GuOFoQqpK5AiEAlxvbpZd/ji/wWiMd9t292wmsCxwoh/P7PO++icjporw="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.68.tgz_1482587361172_0.7439123159274459"}},"0.0.69":{"name":"affjs","version":"0.0.69","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"e87561aca62ff65553bc05d1a5de5a791a55d16d","_id":"affjs@0.0.69","_shasum":"8d18b5b3690c134ef570d164b5fe9d89cda692a3","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"8d18b5b3690c134ef570d164b5fe9d89cda692a3","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.69.tgz","integrity":"sha512-zlUqWAzC3CUzYh4ySUvZEPzrlcBgiffSlaYvVj4jJfIHH5Qbcolvvy10EymBJR3AC0RRx/g49prElRelE5Z8/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRCu6+yD8Ehc6o3OCCINTeN1b04O1wlHY+uoZoIavH2wIgWYBtk24VISwJLxMBTm4mi8BLO3OPqHcEoGNITaOyve0="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.69.tgz_1482587532567_0.524419461376965"}},"0.0.70":{"name":"affjs","version":"0.0.70","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"5c487e800ceb3a0d18379b64982668f28abd7177","_id":"affjs@0.0.70","_shasum":"97d9752ba75ef65d775c2b81d82112c6b8902710","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"97d9752ba75ef65d775c2b81d82112c6b8902710","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.70.tgz","integrity":"sha512-xC8mEFPEnbc3Gy1kL+S1znlMjTxJWDnKOZtukVYXftaluvwwsJ0VHa32XeR88MX2/t5kIddenoRXzzg+qfVZRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLJdi2kMWD2VPkIdKN9Hd6GP0mw3tZZchPd9xMwKHwegIhAPSEhZv5KwD5qlczGlExJz079LcTDqms2LgBSjbMAClm"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.70.tgz_1482658370978_0.4754262804053724"}},"0.0.71":{"name":"affjs","version":"0.0.71","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"880b190364ace66eae79b92d958429f6f13749ad","_id":"affjs@0.0.71","_shasum":"77968e5b7e58a1dfff96b843fa9262889473d92d","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"77968e5b7e58a1dfff96b843fa9262889473d92d","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.71.tgz","integrity":"sha512-qlI8kbZ25lChkQUV8vHTQjPk2EpLj0bc9zzb+BRoxRq01E953QGsoZ/GlQCN2EbZQYDjH9xcYcFeFuj5u9LULw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDTrR8pkKnJrIkPvIA48daV57G95GSE7aKjOHpcWNtEIAiBOXRiDr5z924pY/Q+XLC2fMjqqBI4GRIJiH3ZotUi5QA=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.71.tgz_1482660866251_0.6069948519580066"}},"0.0.72":{"name":"affjs","version":"0.0.72","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"732d9cd3c8ab53001a41652db133e2df901331b8","_id":"affjs@0.0.72","_shasum":"4f7dd9aff04e0ff2dbbde33f25e72f2b5bebbbc4","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"4f7dd9aff04e0ff2dbbde33f25e72f2b5bebbbc4","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.72.tgz","integrity":"sha512-5jHnSXY7yH3Of0fv1lHpImhlGHBsPWMpM/0Hr+nCH8rtiNJPvy0WKwqidXWyogjPlNL69GmPB7tWffDk+tH7wQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOmmtaYfNeRCxCXRB3f1lbZAW0P2OaGn8j0faiT0DQHgIgLKxDlscC/xmKXi8LVQQ3/+8VqNQ2J2dp+hexjvIhN18="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.72.tgz_1482687610996_0.39712850051000714"}},"0.0.73":{"name":"affjs","version":"0.0.73","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"13e19411864d1b799942954bd6c12b27f8ed28ae","_id":"affjs@0.0.73","_shasum":"4a1d394d20fd90386207411a94849ce911fef509","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"4a1d394d20fd90386207411a94849ce911fef509","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.73.tgz","integrity":"sha512-sqGfrIKa4L2ZnyCVyuJNQ2ZHy/U4S696vQnT2HaI942DsuWqMrrXH4r2Vfpj+YxnQkh5++S3ER94DzjqEUy5yA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4aLcWcNTjUgVRnJUMlzY3sCjRIls8tvXIomiiXih8EAIgNe0yofXbLSatEEtNSVKR/EkbokrCkx6X38JNZYgkPEY="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.73.tgz_1482697757883_0.35769926314242184"}},"0.0.74":{"name":"affjs","version":"0.0.74","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"46777586c785f7ac62cda3837a267f29ff0972f3","_id":"affjs@0.0.74","_shasum":"87bf9da2bb1c44fc882ab711967b60afc5e38247","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"87bf9da2bb1c44fc882ab711967b60afc5e38247","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.74.tgz","integrity":"sha512-h2JgSe9UH/lDYsP/n0yCkEtlblYFy4TsVddC5Io69IJ9D9/xrZcBaF/exVZe8oUlpRFz3v7obDPOeIJSmZqoAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClYSyzCwsT7uCo9jp7SM8i8x7ez3MOqGlnVV8HA7V0nAIgUDhHLVUK+n7Wi5Qom/nysDK1gxzJzDpukyb5lp/ZOpQ="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.74.tgz_1482774265548_0.19387801107950509"}},"0.0.75":{"name":"affjs","version":"0.0.75","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"d0d8aaf27a7bd0d784a7329a4f2d7e281a96d111","_id":"affjs@0.0.75","_shasum":"6bdbf587769bc4bc62857e2c1a7d1878e0461c78","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"6bdbf587769bc4bc62857e2c1a7d1878e0461c78","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.75.tgz","integrity":"sha512-0KrpKIc+C4T3QmcouY+QnwdSvdpMIUoVqRMmLbW8I1HWC5HFCFeTN5Vuvr/QewcQ7d0tfzTk70UUbTu2eWEmmQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3d4aEsaupglBmGW+WVgkDXlAiy0467WLd8oVKRj8ehAiAyfbUXOJ/Sm1L2vs7xySlUq/fYbzjOz0SA22hL/fRi/Q=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.75.tgz_1482845233554_0.3419358651153743"}},"0.0.76":{"name":"affjs","version":"0.0.76","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"125718dbb0faa5c15c40980dd09de0a90cadd7a2","_id":"affjs@0.0.76","_shasum":"f1dfa26ed28329106f5a57f64003cc544abad0c9","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"f1dfa26ed28329106f5a57f64003cc544abad0c9","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.76.tgz","integrity":"sha512-nbnEjiV1CTC4663G0I+RmiR1xgHfljSlYR8gIbqoZEOTwjsfbn5Z8Y4MlATZwmR3ghCYTqfFY9AU2jVK0sPtTA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCU5NBsXtN+Vsj8cYoG6hPJx7VR4kiJ/uurOTVqNaMpXAIhALDPi3NRHooaKkJLk6RRSS5GbRqsJSvHzi6MJq7dMlsO"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.76.tgz_1482859723258_0.37048533116467297"}},"0.0.77":{"name":"affjs","version":"0.0.77","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"949ac58a4e7ab0b92d262cc3aefc10f60ce707c5","_id":"affjs@0.0.77","_shasum":"bb866f89cecf261b3ce89280c75509c23ae0f4a2","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"bb866f89cecf261b3ce89280c75509c23ae0f4a2","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.77.tgz","integrity":"sha512-3E42ektJUSgtzfMgFGQLv1FHwcFQ84TcUemcCE0a34/ARlhQthRPSsZ9w/wINMphCf8S7z5jDae7w88VvgH60g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUijpqZq/583tdxKWRK8mz80dY2Qsq0RQg+oGWyVa7GQIgQoLh0V6QrarrUVv9ZRt6M/UcVOG+jCgIwTGmoySzD7g="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.77.tgz_1483004603480_0.09182933857664466"}},"0.0.78":{"name":"affjs","version":"0.0.78","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"1b926ac8d8ac005c3e0acb240aabf779e7eb63e7","_id":"affjs@0.0.78","_shasum":"f745e8cb2d644a73ad2a6e807f16c1e97d79eceb","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"f745e8cb2d644a73ad2a6e807f16c1e97d79eceb","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.78.tgz","integrity":"sha512-ZJ9t5Ns2XE+CuzFl+CMZ0lv1pbLMlpJqTu+Mifkf7NckJqJqHd6qZVQpZomd6xuvatoB8OSMnfvwptB82Ag3pA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHWKCTlNFi0CnhAlzDPnghM+7yjY8TEbeIybu7cDMQULAiAQuJnb4uvSFSc1VsHGiCLNWTtmXgtr2Gqm+lRc2q+QJw=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.78.tgz_1483034429784_0.04179239762015641"}},"0.0.79":{"name":"affjs","version":"0.0.79","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"3f62f75dc98464e285a34d49611c47a2a07360bd","_id":"affjs@0.0.79","_shasum":"d6c709265d25923a63aad28047637cf01a314518","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.2.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"d6c709265d25923a63aad28047637cf01a314518","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.79.tgz","integrity":"sha512-wHW5Scv/MVZegSu1ZR6gJN64SBN7Nbq2CbHY87CDRbrjW+zyKiMIVNRIr6sDhUEHNSCQD7PMj3ETKdZvNHO++A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAulial3AtmgxMYiSS8UUgG7fUozxGxK5clR8q8Ahv75AiEAtOqHwi6W99vV95z9pu3lFGNJr3rCBvd5EqvOqo+RoYs="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.79.tgz_1483035360059_0.6307774027809501"}},"0.0.80":{"name":"affjs","version":"0.0.80","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"ba6ede934cb479a9cdd4dee6e8532388e285939a","_id":"affjs@0.0.80","_shasum":"1c0249a2a5b7b1a58c2b14a8d29cd5f3aa3ad6ad","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"1c0249a2a5b7b1a58c2b14a8d29cd5f3aa3ad6ad","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.80.tgz","integrity":"sha512-gu8OmTMEQy2CQLNkRpA/w6TypRniSKV//KBPM7smpZEhTRsZHEUbDMd8teMGlhq3BbvJhozX5QnWmYopEKU3ag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFTQb9A202bHgwdEBX39YygxDqQnxxJyknIVJOteGJX3AiEA+4bRD8dMMWU2m666ZtcO2mFZ9U7dG2NRmLnCZ7BdVgc="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.80.tgz_1483180377793_0.5447367334272712"}},"0.0.81":{"name":"affjs","version":"0.0.81","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"72ab39ab71dfc90f66f2041bfe03abc2033e8338","_id":"affjs@0.0.81","_shasum":"2a74880e2e7daff7860c405f28c8f232771488b8","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"2a74880e2e7daff7860c405f28c8f232771488b8","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.81.tgz","integrity":"sha512-NexLWzR1nW4dE/L72pJheqr/mrK2yKbYy0Swis3SR5b1ssYoZjJ9Jc+heCVvfXctqYyNqCXA033Hy9fa+OZi9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGftCm6nAt9xww1yQlRnynK4XPLrL4uqbOxq1vkii2OvAiEAvHhWnT61oVNqUTfZd0kOgEaE8KlhkIzSH9LMu1PKsAs="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.81.tgz_1483183315424_0.3125044838525355"}},"0.0.82":{"name":"affjs","version":"0.0.82","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"a4e8fb5a4a5488e3af1481a46f2066ed5b0830f4","_id":"affjs@0.0.82","_shasum":"11270801a77875fe4a125acbf4a70aaf84911d39","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"11270801a77875fe4a125acbf4a70aaf84911d39","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.82.tgz","integrity":"sha512-AEbjZ5Vtlh31QuVWvwr4Hveg+Cc9iMP43hw7Lkred6KIF7VnyTu03slMAkUwRY9dDKna8nuJbltIENMF0WrrCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChcTTZbwl5ILi11pMKmiyeVcPuAqkRI5jlR1dzTUMaBwIgAZquFnvnC0Vq+m9YbBDfowE/iUf1WFU/wtRpIDXQrGc="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.82.tgz_1483205908262_0.5698223267681897"}},"0.0.83":{"name":"affjs","version":"0.0.83","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"5d1f25426405014085ee157779c85d1bf32cdba1","_id":"affjs@0.0.83","_shasum":"242c6a4474ef459e389dd497b6f7590b6934f1b5","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"242c6a4474ef459e389dd497b6f7590b6934f1b5","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.83.tgz","integrity":"sha512-+37WxPDPy4aTLGKnSo9D0dLSqyqX6Wpj04KiEq8ntWSLisaUb7i//IdBE7AMywxqctW6WJB4jqqyxwRuMdhfiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgja0cjVh3ZxFEYVilXlEqj53xIvNnGK0dOY5dDvSuJwIhAOJq5FaZcZgqwks/WTGmUp4/Gt1IUT2mVcUtFgV1Uxt9"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.83.tgz_1483207498826_0.6164178042672575"}},"0.0.84":{"name":"affjs","version":"0.0.84","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"ee5c72fa55de7bf16955cbfa482b03b4b95cda46","_id":"affjs@0.0.84","_shasum":"1922b94a45f8b046369bc3d30f1d44337f71f9d4","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"1922b94a45f8b046369bc3d30f1d44337f71f9d4","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.84.tgz","integrity":"sha512-OAE3wSE+9Im0VX7MnbJ1Ct2/xnQEjeL0gw9S7SkVW88RMUsGB1Zt/ZnJCyLlDJ+14xFi4LxeaeifvG/Cn/Gbgg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAgW7pKbOewOVPd15ombe1sQ78sUZeb8CvWCf84+3HB1AiEA4v96AUUCEwjz23tjvvkNch3SShuMHZMH8kNSGBjgQmw="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.84.tgz_1483272965230_0.4470378360711038"}},"0.0.85":{"name":"affjs","version":"0.0.85","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"797e294d416fc1770f60ed4a210ce960406dffce","_id":"affjs@0.0.85","_shasum":"3ef05ccd0da966b3028ff181941bfece8520c538","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"3ef05ccd0da966b3028ff181941bfece8520c538","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.85.tgz","integrity":"sha512-T+SpUUUuQpH3231/7IxdqlvO7SFxVp2Pg+fMamUcnnc6t6+WdDMoZw366z46B5B8c786bRbRhpXvKEzVTG60+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMAhelS768H/eSGQh1QzbMlmIOxgQlp26IBljR2pMZCAIgN9W0pev37LccBdy/obfupxmxGpCCCVGjSy0/hiACYWE="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.85.tgz_1483424967519_0.15300913574174047"}},"0.0.86":{"name":"affjs","version":"0.0.86","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"00d88e33691039c1738ba04d58a41b1500b3a317","_id":"affjs@0.0.86","_shasum":"ee2e47443a907d28ec64e46764e74ed1d9bd23b6","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"ee2e47443a907d28ec64e46764e74ed1d9bd23b6","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.86.tgz","integrity":"sha512-XIvp0fFs/wlfrRSBNu2uA03YWtKCKfdWjQp9VcZRfukBstl5jSfzBn5CrTXux5XryBmE3eXBNOeFemqF82Q21A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbfStPdmx5+JZeYDcN4llFUx4oD3tA0KqWtvNyB6KbvwIhAJqnkdUgaBxrV58OaFDnleUmFmIN88TVe+zbV0GHxJsU"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.86.tgz_1483426036412_0.23546930844895542"}},"0.0.87":{"name":"affjs","version":"0.0.87","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"5666c4260da92393da34f45805d3f6039f3a4dc0","_id":"affjs@0.0.87","_shasum":"2a8387122cd6ca6302b9a64036a281f1d6ec6c91","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"2a8387122cd6ca6302b9a64036a281f1d6ec6c91","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.87.tgz","integrity":"sha512-aQWSLvkWf3vRP+qr46vzJ9kYvpeSCT2LolkIBqi3Pa12wB6h5O+a+iLlLEGsMsowoflPmUuXyc9mwK0MK4LT0Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkn3llw8O1pWVrtSbmSOGwo1KpbnBad/unl0KCKad10QIgSSUiQvMue0xhmQfwWBlZorQAtzQZV/f5nwwgLbjlQzE="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.87.tgz_1483456977513_0.2907852567732334"}},"0.0.88":{"name":"affjs","version":"0.0.88","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"17c0f48abd3d68f6df69c1eac812348c9eb49e64","_id":"affjs@0.0.88","_shasum":"3a74e385e3ce24c7998ee65d4df345b2f545c8af","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"3a74e385e3ce24c7998ee65d4df345b2f545c8af","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.88.tgz","integrity":"sha512-Ta6TUgS97jqoTxSmfAtFO7yhXqJJ0qbkYe6dfhiI08XD3QVPWn7j6jzy8uW3HEIolybSkDd6AZn7cI74wHit3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBvfKN+qL3hKCnmbFiPIgioNrH5CappOl6SaeRqCemOAAiEA0eLbw3BXeJRGybMwNdCO/Ek3AnWMMWkRtM49Ilv+oeY="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.88.tgz_1483458375306_0.4119983254931867"}},"0.0.89":{"name":"affjs","version":"0.0.89","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"c5b4f453f8ef431e92da7809b2f376fa0799b781","_id":"affjs@0.0.89","_shasum":"861bfc921f45a6c0266ec17a8433c33a310fad71","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"861bfc921f45a6c0266ec17a8433c33a310fad71","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.89.tgz","integrity":"sha512-9k+Vh0eetsDZRmQXYU1WeXZ2WOvETWdwcIAPgzfZo43l4snKP+XaUQzmVI38Q92HCbEZSSaIiCBX4Y6VjIvLuQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEp7v95rQAUNHYHWPQJOIgbAck7DaRlKXZoW0DRtAg6xAiBx3GYLf0e3CuJOF0j5mQf0hshtq1iZxO3pV+t57sYlXA=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.89.tgz_1483460014557_0.4382878467440605"}},"0.0.90":{"name":"affjs","version":"0.0.90","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"3a9a800f04618605775cb93ff666a84c3bf492b3","_id":"affjs@0.0.90","_shasum":"d7534321f97e283b4aec7a2812fb2adcf4336e6b","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"d7534321f97e283b4aec7a2812fb2adcf4336e6b","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.90.tgz","integrity":"sha512-+YO9YjHsHYwvITGSwc8qnGPLHgYrmf8UtjUMRLl+NGn7O5sXVQdD9Pi83somI5H7XYAuygX81dRy6I2AD9P42g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChsjXLTu29B/sBE3hE/hExcHbVcB3iuWkyvoaBijetYQIhAJUlbiYiY5gda0EbieMsZu+9si7tG0Kf22uq7AjMK8qj"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.90.tgz_1483467696073_0.5776564343832433"}},"0.0.91":{"name":"affjs","version":"0.0.91","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^17.0.3","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"c245f534f25ac4c3b23ae09994831788e1aa57ad","_id":"affjs@0.0.91","_shasum":"15965f7fe139b8975359dffb069b5fde2d9f98a7","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"15965f7fe139b8975359dffb069b5fde2d9f98a7","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.91.tgz","integrity":"sha512-c2xDb2iVAEpNqndD7wDSLSB7nf7SXt42xTne1WCga5Hzem1LX0bNc8Og9bKN/VLH5SxbgXgNJhROTfhGNFgFFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDOpZ1HbPYGTMycxvpkt/O5LkwZb/WXcAxRrZgZj5uIFAiBOmAjugyqY00YAx4b0kjAqkt+Xy235O/rxU37Hih7CWw=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.91.tgz_1483530577379_0.3872276470065117"}},"0.0.92":{"name":"affjs","version":"0.0.92","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"df3b3cbc3e6d74c233ef106e6cfc9886130f7723","_id":"affjs@0.0.92","_shasum":"9d7f35ddbc111b247356150c44eba8b24acc8adf","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"9d7f35ddbc111b247356150c44eba8b24acc8adf","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.92.tgz","integrity":"sha512-VLL1C2AlIfUkIh11k1GKAWUxfNf1OH53y6+JxlIf8QQMEG8ahVGRr0c53cwP4gxvyvbVYffNfoK1LO7DsHu8bw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAr+m05menByaUEQtO/0KaDLQJkPkv2OoTRoeVrU7H04AiBUOAerHpw/u3UZ3YftjBHgfh3dbGWAZJ/83/6aqpGhcw=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.92.tgz_1483605492947_0.4488440656568855"}},"0.0.93":{"name":"affjs","version":"0.0.93","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"cc692505111509f64d6adb1790243d95b2b507c2","_id":"affjs@0.0.93","_shasum":"56a17cb8e05df5e86d3ca8f60305b52ccf9f7d97","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"56a17cb8e05df5e86d3ca8f60305b52ccf9f7d97","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.93.tgz","integrity":"sha512-WN6U1U0ZKicigq9sgUANVEiFaeRlvKHAHyU10W0RsZwJmu+HC7QOg2XHJh9NlmRjoy7Gzhu/yPOQiqEB9y+okw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCis7x9j3ZS2+vcW4IFU5jVKe9Uh4wzRckrAwoymnnPUwIgPM9Wxx58Zfk3l89sK5EfyaR8esBY9lsbHGjZB9X4pns="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.93.tgz_1483606437970_0.16151763615198433"}},"0.0.94":{"name":"affjs","version":"0.0.94","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"4facafeef341b70c691522be119a6af88c47031f","_id":"affjs@0.0.94","_shasum":"42bf87560ba64f62b59149d440f217087ae8aab9","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"42bf87560ba64f62b59149d440f217087ae8aab9","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.94.tgz","integrity":"sha512-y6h8RUeifkIFVRx0ARe5KqMqLu35MNVbZ92BmO980c4JNucktmqrXROh552VYRsgL/Loe2XUuOPusJt7GuZhqw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHlX+B9acfBitORcocUqK4xEgqGP3F1xXYNMKZcXVEf5AiACJJWoO5SzaxnfwlaMdpv37FbdfH+UK9aXs8L2rcOYOA=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.94.tgz_1483622614599_0.4303594036027789"}},"0.0.95":{"name":"affjs","version":"0.0.95","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"42f590950fdbea75568d45109ede2f9351fcaca6","_id":"affjs@0.0.95","_shasum":"96a930d662b580ba7f41750460e57cad2293f4b0","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"96a930d662b580ba7f41750460e57cad2293f4b0","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.95.tgz","integrity":"sha512-bWa7i1JeV4PyQrCgAqcv7s2qepQ4z2Lau+A5bqGcrotOwL5EK3CHW+HHQiGUNu9Fy8Ki+zfO3NM70mw6Q1rnxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtEKBc6y4Lt+m5V7ceQjmf/TjhevPX6mQng1Ef6QaDpAIgZRpykqwQ4Prs8PdDg27UkU1zeXPvyo0l8vUfxDecGt0="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.95.tgz_1483629569810_0.8209631075151265"}},"0.0.96":{"name":"affjs","version":"0.0.96","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"05066b71d27ed9dc4f4804dc8f3d84075e90cb9d","_id":"affjs@0.0.96","_shasum":"f480e886526eca4647512324f0e481d4d916d00a","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"f480e886526eca4647512324f0e481d4d916d00a","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.96.tgz","integrity":"sha512-5hEIRid/uEV31Y9yJbFh60NfxsVH8vTyGqnbe1ANt4jhN96bjAQBzDWgosP+eUIEDuoZAIsPGsaHHW5LkYk2rw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHixuUetvHT679qL1nqjy7hoSD3IIeslMA0TmfqyW7dwIhAPCqmJN8chGkyLaQbpXIj+C89200onZoD7qWNQemXD09"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.96.tgz_1483630326275_0.9350134308915585"}},"0.0.97":{"name":"affjs","version":"0.0.97","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"32d3702c42ca21f2054e0299bb88815d43c1954f","_id":"affjs@0.0.97","_shasum":"5b10e83eb132e3fca8a21717c650137ec5d35e73","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"5b10e83eb132e3fca8a21717c650137ec5d35e73","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.97.tgz","integrity":"sha512-bxNhYH5aGojbVDolbEooXJeeM9x9qbqY/rsRL32SyDIBzZvSFKx36s4hUc4moNa9XPmACt9FGP4EKmLBWzLlhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDL8KRyNDpArmmnlLegVkgZUayiPo9H+a5XLU1hauck2QIgc+sFio0Nf6w9xjZlVaPDo5eDqSQmShBnXVujYimfpZs="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.97.tgz_1483631115668_0.4580070225056261"}},"0.0.98":{"name":"affjs","version":"0.0.98","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"5d33fdcef35eadbf680556c48873239c5914ec09","_id":"affjs@0.0.98","_shasum":"737b5c2dab6960b263aebe77173daed6f3a53f4f","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"737b5c2dab6960b263aebe77173daed6f3a53f4f","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.98.tgz","integrity":"sha512-MnHStWM2Uubc3a4PSwcJ7+7u7tyOJdRLiMQVXkhlEQskwY9ajMDQB4jZzrJPlZNOmBkzriMIcXzLznS1LpMlvA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtSoNsMiEHWBHOjsbFvJgeUABRSUg4IgZzyqCr5AM6MwIhAItjf57D3dkEUvG++rL0i5+2g+qzmjCQ0nn24nkMJO2O"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.98.tgz_1483876762444_0.5557171755935997"}},"0.0.99":{"name":"affjs","version":"0.0.99","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"c44670867bb33d167704ff7dcbd26bb3b2c4734b","_id":"affjs@0.0.99","_shasum":"01298f31d25a10fb4cba1cf0aa720439a6a74106","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"01298f31d25a10fb4cba1cf0aa720439a6a74106","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.99.tgz","integrity":"sha512-2gGPHzgrLJgnrnY5wvrg/hA1DXMch/p+Nbu2q311w17uMyTUNyf32OKYubSfKyrW+0+zxrtg6TkfhSe0SaO31g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA7Fz2i6itIxjR8nD7rqtIleFYZt/Oxkrhw7MUlQWJ+FAiEAsS8nkLzF8sK68by0dkgEYFKqp+Cw4J/Nsvp45go+p1s="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.99.tgz_1483893400683_0.5777944130823016"}},"0.0.100":{"name":"affjs","version":"0.0.100","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"a97233a55655a715097a1aa94ea8b816ca55a2df","_id":"affjs@0.0.100","_shasum":"86f19b4cf81cc08a2ee375be69b61547543543bb","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.3.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"86f19b4cf81cc08a2ee375be69b61547543543bb","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.100.tgz","integrity":"sha512-79kyBnpXHq1wjDzo+We0VBlNMleajQ4PGEPmrVSRd2cFc0f1G2QZKBO24IfUAJ75qUc4W5WfxM0GDMidcuJxDA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFdAaJJMxAP9bwpGB1ppzJmeANm2s8RNxdb33zh4Y91wIgb2RNvLGaVf/Qfz2Nqxqtz1ISagG8UjxshcFJmIh8n6o="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.100.tgz_1483962336848_0.6509250556118786"}},"0.0.101":{"name":"affjs","version":"0.0.101","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"fe0bd034d95e5682dbede6435b31aeba97089a64","_id":"affjs@0.0.101","_shasum":"f3a641617bf089ab217ace96b66be30640881307","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"f3a641617bf089ab217ace96b66be30640881307","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.101.tgz","integrity":"sha512-0/PMrx8rNOJUzzh0OlN4uQkzgxhnWHz0ylMnUb+8qTthxPz4Y1Wtz0vjcrs1GdvC92zzkZVWL/lQ2nUrr1UilA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBcCuXYuBr5T0rjZVaujGaQH5n6P88mONnxA5P3v0V5PAiAmfIqvIDcEXx87ojohsj+VXOqsO+r2rSIotieB1bpzcQ=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.101.tgz_1484190447468_0.588247086154297"}},"0.0.105":{"name":"affjs","version":"0.0.105","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"fe311fa254f54d6d7dc6e6bd91d11bc98747bd3e","_id":"affjs@0.0.105","_shasum":"8963eae0e93044017c2259ee4ff05e6d61168092","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"8963eae0e93044017c2259ee4ff05e6d61168092","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.105.tgz","integrity":"sha512-tk2XeyrlLeImA5CSX2oRzuFGPWGfC1dbMI0lUmiHNd73bVTDIx2fXr7NB0lowZP4jMXCAsC53OC+/amfA81KIQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIED+fRYCQULoB+PmMdWFbfd1WFcBGRX6S5poTachajwaAiEAkvszPYyHMnb7/U+jmOFzaPry/YIvYDPPLQ0I5i8cyyk="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.105.tgz_1484546669858_0.5425544313620776"}},"0.0.106":{"name":"affjs","version":"0.0.106","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"4e85b2b6aa3c911eaad0a85ffaf10f1461d1330d","_id":"affjs@0.0.106","_shasum":"592d2a9a1bf465c97d7cf77d13836d8d8a5718ad","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"592d2a9a1bf465c97d7cf77d13836d8d8a5718ad","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.106.tgz","integrity":"sha512-9BQKKvG3L7rRlw+W8nWcsGagsrTWZx0N+/HqGkHDOeOjC95PGVy9WuXkJAgxjbcmFjkZDypJsLzx18N8CCBhsA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFnRSc7ap8nnUKfyRDHw2OpF+CbPdObZQVHJu7aDeDn1AiEAjcgXlEIlKH12OgQgps1TMKuzDXpvrBWkRF0SPsHI24A="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.106.tgz_1484553177593_0.6298527459148318"}},"0.0.108":{"name":"affjs","version":"0.0.108","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"7b74429c022ff6c5861e6910927bdc29a859213c","_id":"affjs@0.0.108","_shasum":"07b08d69d36f46f8a3b3c3e6e84e87473f30be07","_from":".","_npmVersion":"4.0.5","_nodeVersion":"7.4.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"07b08d69d36f46f8a3b3c3e6e84e87473f30be07","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.108.tgz","integrity":"sha512-nItQ8HeytlgQxlATe5AtmmpTY9QgrFupGrh5uX64Kn0IeQCJncSbo5TTDMEnaiV9G01So7+r8IHGEa76vo4/GA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFOmeDFU1rrxNFgQt1sYNyE2g8Z5whRCWlpz2MGVz/BhAiB3Q108rtz95nfZP1ALl6S8wj5J67U2Lb1UwxhbIA7+IA=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.108.tgz_1484662137591_0.08282805816270411"}},"0.0.109":{"name":"affjs","version":"0.0.109","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watch --coverage","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.18.2","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-preset-latest":"^6.16.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","gitHead":"7729d535efd5f1087c4a00ff5fa7bb3f29405b5b","_id":"affjs@0.0.109","_shasum":"859b644806bbde376a7cb7a86296e703c5dc5324","_from":".","_npmVersion":"4.1.1","_nodeVersion":"7.4.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"859b644806bbde376a7cb7a86296e703c5dc5324","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.109.tgz","integrity":"sha512-REiLhT2+IeMUcnglDRYEnvAvA77juQ41yQe0CVRXuuVfFoetC4SF860ZHlB3f0CUwo/enIbH0evwjKmUj0Pj2Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlTDCv6bqxvTjhVT6coltYdAP65CSzdQWWXRhX06g/FAiEAyNlSvlLMB1pAaNZ3QBYlZytU7NPVO5mZEqFnV6kBLdw="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.109.tgz_1485359763400_0.2970676086843014"}},"0.0.110":{"name":"affjs","version":"0.0.110","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watchAll --coverage --bail","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.22.1","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.22.0","babel-preset-latest":"^6.22.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","license":"Apache","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"gitHead":"bab916e9132386677a9a7d30e6152aee1f8d00c6","bugs":{"url":"https://github.com/reusee/aff/issues"},"homepage":"https://github.com/reusee/aff#readme","_id":"affjs@0.0.110","_shasum":"712c770e5c03e8280a7698ffb8fcb3952dced099","_from":".","_npmVersion":"4.1.1","_nodeVersion":"7.4.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"712c770e5c03e8280a7698ffb8fcb3952dced099","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.110.tgz","integrity":"sha512-H+9s4JqdLmdxwrDvNptRhQGAwOc2vnQw1riuQEzuwVr+nxIYWDUS7MTXrQALQGnbOVWUP+YuzgRpk9yhR9psTg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDou+b/1X7L5QHxJUjefnjpRiSvJo6cpHDeaJFqMi2xlwIhAMsPNzQeBcg5twRL4sVLKtolggvyhtawS8kqLwuE9gaU"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.110.tgz_1485873455527_0.9313253699801862"}},"0.0.111":{"name":"affjs","version":"0.0.111","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watchAll --coverage --bail","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.22.1","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.22.0","babel-preset-latest":"^6.22.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","license":"Apache","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"gitHead":"14d97bee75fb3a45e5da8201714381409c4fb6ea","bugs":{"url":"https://github.com/reusee/aff/issues"},"homepage":"https://github.com/reusee/aff#readme","_id":"affjs@0.0.111","_shasum":"7329a4b610f0df61eb0d936c5ef4643f8fbcf97b","_from":".","_npmVersion":"4.1.1","_nodeVersion":"7.4.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"7329a4b610f0df61eb0d936c5ef4643f8fbcf97b","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.111.tgz","integrity":"sha512-6tyi3k5AewX9XZh7cXrdeHTulXPUL+3RhUm6TRfE0bcKGyucPx8iH2bTvFxF6jfuI3OFHVRlItDX2Svjxo9rAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdeuVaFibxCT0RU6JspJeIBE3EqHcwsKaDBov+oPXZfQIgCuxI+T95M+egBKxtqemSuhTcXoPfhPqPA8HqPV+8jSo="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.111.tgz_1485915070817_0.9856062852777541"}},"0.0.114":{"name":"affjs","version":"0.0.114","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watchAll --coverage --bail","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.22.1","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.22.0","babel-preset-latest":"^6.22.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","license":"Apache","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"gitHead":"cb2ffbbd238bd8c0f6109aa01e63167982ee268a","bugs":{"url":"https://github.com/reusee/aff/issues"},"homepage":"https://github.com/reusee/aff#readme","_id":"affjs@0.0.114","_shasum":"6c2fb5b3179cfdf058cfe1803972399363743407","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.5.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"6c2fb5b3179cfdf058cfe1803972399363743407","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.114.tgz","integrity":"sha512-8D1WhF5le4odQPlW6gVhdPX/UOuly69Qe+6QkOmo5fsLzKb0Sen1EVFbzrBRupLDw4J+uFhwYg4kxfkM6G+GFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpYGQa2UZtiQcLQm8lfhaYrjFDWfJ1g1UZ+m+utImvXQIgc1d+p30k9DwPSHyLvrYQzDFc8MCSmx8BjHKIFZCZSBo="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.114.tgz_1486874469026_0.9228293211199343"}},"0.0.115":{"name":"affjs","version":"0.0.115","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watchAll --coverage --bail","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.22.1","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.22.0","babel-preset-latest":"^6.22.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","license":"Apache","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"gitHead":"612b2d22e649390aaed8c1b484bed9442d5eeca7","bugs":{"url":"https://github.com/reusee/aff/issues"},"homepage":"https://github.com/reusee/aff#readme","_id":"affjs@0.0.115","_shasum":"916a8f5697731838b7a819930d22739b86302026","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.6.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"916a8f5697731838b7a819930d22739b86302026","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.115.tgz","integrity":"sha512-eVurx0vsRy8quln4uhhDeZyo/tacwIUaH65jeSg7tQfcD3tAUElZ//ziHgvylus3uXuUUP6zt/+Vrdhtzba5Kw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+iDxWmK1GWHNTy/SKxEqo53v3uMysZOVrZLJJ5itKsQIgTAZagD58l9rkQ4NZlArfoxz5lSoqos6eDA62JPcr/aQ="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.115.tgz_1487818996923_0.040004381677135825"}},"0.0.116":{"name":"affjs","version":"0.0.116","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watchAll --coverage --bail","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.22.1","babel-loader":"^6.2.8","babel-plugin-transform-object-rest-spread":"^6.22.0","babel-preset-latest":"^6.22.0","coveralls":"^2.11.15","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.8.3","webpack":"^1.13.3","webpack-dev-server":"^1.16.2"},"main":"lib/affjs.js","license":"Apache","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"gitHead":"50abb3df0f4533d85be155bd0c0351e1356a97b2","bugs":{"url":"https://github.com/reusee/aff/issues"},"homepage":"https://github.com/reusee/aff#readme","_id":"affjs@0.0.116","_shasum":"f6f1d0a154c81a17c41d92a61a4198d9d14df94c","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.6.0","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"f6f1d0a154c81a17c41d92a61a4198d9d14df94c","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.116.tgz","integrity":"sha512-KcsPVk1oXegyjtFKCYii4vKMkVrhqoYiQDTGPQQGWDE/34pOGBb8FQD+J1sHTwcWUMpcVRe2fphLvFYTrm96mQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDI96c8pLVOxBJvoCoYAmi6d7+lhEbNJPRpCbTyNOEdFAIhAPHR+XfcYhb5z0RZzkZvahEvdWDBkgiXXyjObjn2v2bf"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.116.tgz_1487999766081_0.412584962323308"}},"0.0.117":{"name":"affjs","version":"0.0.117","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watchAll --coverage --bail","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.23.1","babel-loader":"^6.3.2","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-preset-latest":"^6.22.0","coveralls":"^2.11.16","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.11.0","webpack":"^1.13.3","webpack-dev-server":"^1.16.3"},"main":"lib/affjs.js","license":"Apache","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"gitHead":"19d0d337785dd10528bddc8e6b3ff795d55a1eb0","bugs":{"url":"https://github.com/reusee/aff/issues"},"homepage":"https://github.com/reusee/aff#readme","_id":"affjs@0.0.117","_shasum":"6ae331bc41005a438db03d4a06595eb4d4080cd7","_from":".","_npmVersion":"4.3.0","_nodeVersion":"7.7.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"6ae331bc41005a438db03d4a06595eb4d4080cd7","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.117.tgz","integrity":"sha512-MFJc+AXWRc7Rkmvpky5h+2guywbJbqIAzROUi6hLZCbN+L3XFVYcR89X1+m9ShWC8VzeokqlE8rUogsxB5ZGBg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHA2hObAZVXMoHAmf52rvLlOxnViygQrda7F81GrAjEUAiBe4bUiMZGjw6pNb9VzINoEiv4w8c5KnwNddAut3rTdbw=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/affjs-0.0.117.tgz_1488607961400_0.3925806537736207"}},"0.0.118":{"name":"affjs","version":"0.0.118","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watchAll --coverage --bail","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.23.1","babel-loader":"^6.3.2","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-preset-latest":"^6.22.0","coveralls":"^2.11.16","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.11.0","webpack":"^1.13.3","webpack-dev-server":"^1.16.3"},"main":"lib/affjs.js","license":"Apache","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"gitHead":"e7ae63fafaac8e9f39b94329190ae7cbda8ffbb3","bugs":{"url":"https://github.com/reusee/aff/issues"},"homepage":"https://github.com/reusee/aff#readme","_id":"affjs@0.0.118","_shasum":"90709b077da9706cf3d4a0d22853246817378392","_from":".","_npmVersion":"4.3.0","_nodeVersion":"7.7.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"90709b077da9706cf3d4a0d22853246817378392","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.118.tgz","integrity":"sha512-lUAb4c0zWhMkLoUbd8tauXHwc7YUd7+hYPn95ZzpdZyiHx8y18INxSkIeQtyQJ80p9Da7+l5PMwmZIsB/xdX5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICvDozmf6wujMO2Fq3apeagOhP0gcNCkZDa1fuDyBNXIAiAXbM07Ja0UuZE8v/2NXbbVOeWd6wt8qJ1wXr19Jmdqzw=="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.118.tgz_1488693975984_0.8933799895457923"}},"0.0.119":{"name":"affjs","version":"0.0.119","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watchAll --coverage --bail","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.23.1","babel-loader":"^6.3.2","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-preset-latest":"^6.22.0","coveralls":"^2.11.16","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.11.0","webpack":"^1.13.3","webpack-dev-server":"^1.16.3"},"main":"lib/affjs.js","license":"Apache","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"gitHead":"0edba27f916d8898dc4036b53485a14d1b72141e","bugs":{"url":"https://github.com/reusee/aff/issues"},"homepage":"https://github.com/reusee/aff#readme","_id":"affjs@0.0.119","_shasum":"2a4ead0a2b64ee9a8693ed79b6764172d0cf01ef","_from":".","_npmVersion":"4.3.0","_nodeVersion":"7.7.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"2a4ead0a2b64ee9a8693ed79b6764172d0cf01ef","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.119.tgz","integrity":"sha512-9+2xvXV0+zD4Luc0myCP5v8EP3rWR2ckI+MYEAbDCQPpTHYcGIMrL0Sf4aJ/TbHCl0NkZWiqYfxlEG8sbvdahw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBiIV2vUz0y+sfnkS+zg32vxj9AIDcq/wjsK4GXUMN6EAiEAmXRfWIIG3XMy0ro4CtZwYjcdBITy3nIHUqWJ5J4bTnk="}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.119.tgz_1488694439026_0.4565237080678344"}},"0.0.121":{"name":"affjs","version":"0.0.121","description":"minimal, pure js frontend framework","scripts":{"test":"jest --coverage","dev":"jest --watchAll --coverage --bail","build":"gulp"},"keywords":[],"author":{"name":"reus"},"devDependencies":{"babel-core":"^6.23.1","babel-loader":"^6.3.2","babel-plugin-transform-object-rest-spread":"^6.23.0","babel-preset-latest":"^6.22.0","coveralls":"^2.11.16","gulp":"^3.9.1","gulp-webpack":"^1.5.0","jest":"^18.0.0","jsdom":"^9.11.0","webpack":"^1.13.3","webpack-dev-server":"^1.16.3"},"main":"lib/affjs.js","license":"Apache","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"gitHead":"e0bb8010eed703c451f65b15f0b929e79232b501","bugs":{"url":"https://github.com/reusee/aff/issues"},"homepage":"https://github.com/reusee/aff#readme","_id":"affjs@0.0.121","_shasum":"dc85cb0f5b9b709c0df8d5f4ccd9d575f2f99b19","_from":".","_npmVersion":"4.3.0","_nodeVersion":"7.7.1","_npmUser":{"name":"reus","email":"reusee@gmail.com"},"dist":{"shasum":"dc85cb0f5b9b709c0df8d5f4ccd9d575f2f99b19","tarball":"https://registry.npmjs.org/affjs/-/affjs-0.0.121.tgz","integrity":"sha512-r3t5ipLCdNCo+qm2MoWxtwtK/kd2itRnD7smAWNiGdrmbxgPaZIsN8I+Cp76SQGztIprpwkm60syj0iI5iYtOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiWcrNkp/BRYMmfnNRmy2tNRQVxOv7vEPGKNO554XmFwIhAJMIdi+GaJShDY9z/6pcvleDCrJ5DqB+Leze3h6IRj7s"}]},"maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/affjs-0.0.121.tgz_1488856274665_0.9764663483947515"}}},"readme":"[![npm version](https://badge.fury.io/js/affjs.svg)](https://badge.fury.io/js/affjs)\n[![Build Status](https://travis-ci.org/reusee/aff.svg?branch=master)](https://travis-ci.org/reusee/aff)\n[![Coverage Status](https://coveralls.io/repos/github/reusee/aff/badge.svg?branch=master)](https://coveralls.io/github/reusee/aff?branch=master)\n\n## 目录\n\n* [概述](#summary)\n* [代码示例](#demo)\n* [环境安装与配置](#installation)\n* [App 类](#app)\n* [html 标签的表示](#tags)\n* [组件与组件状态](#component)\n* [组件函数调用的优化](#thunk)\n* [全局状态](#state)\n* [状态的更新](#update)\n* [状态对象的 $update 方法](#state-object-update)\n* [组件状态的传递](#state-passing)\n* [默认状态及衍生状态](#default-and-derived-state)\n* [代码复用](#reusable)\n* [路由](#routing)\n* [调试面板](#debug-panel)\n* [异步竞态问题](#async-race)\n* [代码示例：todomvc 和 dbmon](#todomvc-and-dbmon)\n\n<h2 id=\"summary\">概述</h2>\n\n这个前端框架是由 react + redux 的理念发展而成，但也有一些显著的差异：\n\n* 使用 js 函数来表达结构，而不是 JSX，也不是 html 模板或者 hyper-script 类。在表达效率上比较高。\n* 不仅结构用 js 表达，样式、逻辑等都用 js，也就是源码都是纯 js 代码，没有专用格式的文件。\n所以分支、循环等逻辑，都直接用 js 自身的语言特性实现，不需要特殊的标签或者指令。\n* 集成了状态管理机制，而不是交给第三方库。\n和 redux 一样使用全局状态，但不使用不可变数据结构，且实现了高效的变动检测，另外概念和代码都比 redux 简洁。\n\n如有任何意见、建议、提问、讨论等，请在 issues 处发表。任何相关的内容都可以，语言中英皆可。\n\n<h2 id=\"demo\">代码示例</h2>\n\n介绍一个框架，用实际的实例代码，应该是最直观的。\n\n这个示例要实现的是，一个任务列表。\n可以增加、展示、编辑、删除任务，以及标记为完成或未完成、按照完成状态过滤列表等等：\n\n![todo-list](images/todo-list.png)\n\n这个框架提供的绝大部分特性，都会使用到，以达到示例的目的。\n代码只做简单的注释，各种机制将会在后续的章节里讲述。\n\n```js\nimport 'normalize.css'\nimport 'animate.css'\nimport Navigo from 'navigo'\n\nimport { App, css, t, on, key, $, ref, weakRef, h, op, DebugPanel } from 'affjs'\n\n// 全局状态\nconst saved = JSON.parse(window.localStorage.getItem('todos-data')) || {};\nconst initState = {\n  todos: saved.todos || {},\n  filter: saved.filter || 'all',\n  filtered: [],\n\n  NewTodo: {\n    todos: weakRef('todos'),\n  },\n\n  MaintainFiltered: {\n    todos: ref('todos'),\n    filter: ref('filter'),\n    filtered: weakRef('filtered'),\n  },\n\n  Filter: {\n    todos: ref('todos'),\n    filter: ref('filter'),\n  },\n\n  List: {\n    todos: ref('todos'),\n    ids: ref('filtered'),\n    hovering: '',\n\n    Item: {\n      hovering: weakRef('hovering'),\n      todos: weakRef('todos'),\n\n      ItemControl: {\n      },\n    },\n  },\n\n  DebugPanel: {\n    show: true,\n    left: '50%',\n  },\n\n};\n\n// 根组件\nfunction Main(state, app) {\n  // div 标签，用 h.div 函数表示，标签的各种属性和子标签，用函数参数表示\n  return h.div(\n    // 表示样式，使用 es6 的模板字符串，加上 css 这个模板标签函数来表示\n    css`\n      width: 40vw;\n      margin: 8px;\n      padding: 8px;\n      border: 1px solid #EEE;\n      border-radius: 4px;\n      color: #777;\n      text-align: center;\n    `,\n\n    // 一个子标签\n    h.p('TodoList', css`\n      font-size: 16px;\n      line-height: 16px;\n      font-weight: bold;\n      margin: 8px;\n    `),\n\n    // 下面是嵌套的子组件，t 函数表示一个 thunk，thunk 是渲染优化的基本单位\n\n    t(NewTodo, state.NewTodo),\n\n    t(MaintainFiltered, state.MaintainFiltered),\n\n    t(Filter, state.Filter),\n\n    t(List, state.List),\n\n    // 调试面板\n    DebugPanel(app, state.DebugPanel),\n\n  );\n}\n\n// 新建任务组件\nfunction NewTodo(state) {\n\n  function addTodo() {\n    if (!state.userInput) {\n      return\n    }\n    const id = Math.random().toString().substr(2);\n    const content = state.userInput;\n    // 更新组件状态，使用状态的 $update 函数，合并一个对象\n    state.$update(op.merge({\n      updating: true, // 过渡状态\n    }));\n    // 模拟异步新建操作\n    setTimeout(() => {\n      state.todos.$update(id, {\n        id: id,\n        time: new Date().getTime(),\n        content: content,\n        done: false,\n      });\n      state.$update(op.merge({\n        updating: false,\n        userInput: '',\n      }));\n    }, 300);\n  }\n\n  return h.div(\n\n    h.input(\n      // 标签的属性，用一个 object 表示\n      {\n        value: state.userInput || '',\n        disabled: state.updating,\n      }, \n      // 注册 keyup 事件，同步用户输入到 userInput 这个状态\n      on('keyup: update input', function() {\n        state.$update('userInput', this.element.value);\n      }), \n      // 注册 keydown 事件，按下回车时，新建任务\n      on('keydown: add todo', (ev) => {\n        if (ev.keyCode == 13) {\n          addTodo();\n        }\n      }),\n      css`\n        width: 64%;\n        border-radius: 4px 0 0 4px;\n        border: 1px solid #CCC;\n        padding: 4px 8px;\n      `,\n    ),\n\n    // 一个按钮，点击时新建任务\n    h.button(\n      state.updating ? '...' : 'Add',\n      on('click', addTodo),\n      css`\n        width: 64px;\n        border: 1px solid #CCC;\n        border-radius: 0 4px 4px 0;\n        padding: 4px 8px;\n      `,\n    ),\n\n    css`\n      margin: 8px;\n    `,\n  );\n}\n\n// 维护过滤后的任务ID\nfunction MaintainFiltered(state) {\n  // 生成 ID 列表\n  const filtered = [];\n  for (const id in state.todos) {\n    if (state.filter == 'all') {\n      filtered.push(id);\n    } else if (state.filter == 'done') {\n      if (state.todos[id].done) {\n        filtered.push(id);\n      }\n    } else if (state.filter == 'todo') {\n      if (!state.todos[id].done) {\n        filtered.push(id);\n      }\n    }\n  }\n\n  // 排序\n  filtered.sort((a, b) => {\n    return state.todos[b].time - state.todos[a].time;\n  })\n  // 更新状态\n  state.filtered = filtered;\n  // 这个是功能性组件，没有视觉元素，所以返回 null\n  return null;\n}\n\n// 任务列表\nfunction List(state) {\n  return h.div(\n    css`\n      margin: 8px;\n    `,\n    // 遍历 ID 列表，生成各个任务组件\n    state.ids.map(id => t(Item, \n      key`item-${id}`,\n      state.Item,\n      state.todos[id], \n      id == state.hovering,\n    )),\n  );\n}\n\n// 任务组件\nfunction Item(state, info, hovering) { \n  const saveContent = () => {\n    info.$update('status', 'saving');\n    setTimeout(() => {\n      info.$update('status', '');\n    }, 1000);\n  }\n\n  return h.div(\n    $`.animated .slideInRight`,\n    css`\n      text-align: left;\n      background-color: ${hovering ? '#EEE' : 'transparent'};\n      border-radius: 4px;\n      padding: 8px;\n      position: relative;\n    `,\n    on('mouseenter', () => {\n      state.hovering = info.id;\n    }),\n    on('mouseleave', () => {\n      state.hovering = '';\n    }),\n\n    // 一般状态下，显示一个 checkbox 和任务内容\n    info.status != 'editing' ? [\n      h.checkbox({\n        checked: info.done,\n      }, on('click', () => {\n        info.$update('done', op.func(v => !v));\n      })),\n      h.span(info.content, css`\n        margin-left: 8px;\n        color: ${info.done ? '#AAA' : 'inherit'};\n        text-decoration: ${info.done ? 'line-through' : 'none'};\n      `),\n    ] : null,\n\n    // 编辑时，显示输入框\n    info.status == 'editing' ? [\n      h.input({\n        value: info.content,\n      }, on('keyup: update content', function() {\n        info.$update('content', this.element.value);\n      }), on('keydown: update content and done editing', function(ev) {\n        if (ev.keyCode == 13) {\n          saveContent();\n        }\n      }), css`\n        border: 0;\n        width: 75%;\n        background-color: #EFE;\n        border-radius: 5px;\n        padding: 0 8px;\n      `),\n    ] : null,\n\n    // 保存或删除过程中，显示提示状态\n    info.status == 'saving' || info.status == 'removing' ? h.div(info.status, css`\n      width: 100%;\n      color: #88F;\n      text-align: center;\n      background-color: rgba(255, 255, 255, 0.8);\n      position: absolute;\n      top: 0; left: 0; right: 0; bottom: 0;\n      padding: 8px;\n    `) : null,\n\n    // 删除动画\n    info.status == 'finish-removing' ? [\n      {\n        classList: ['animated', 'slideOutRight'],\n      },\n      // 动画完成后，删除条目\n      on('animationend', () => {\n        state.todos.$update(op.del(info.id));\n      }),\n    ] : null,\n\n    // 鼠标指向任务时，显示控制按钮\n    hovering ? ItemControl(state.ItemControl, info, saveContent) : null,\n\n  );\n}\n\n// 任务条目控制按钮\nfunction ItemControl(state, info, saveContent) {\n  // 按钮的共用样式\n  const buttonStyle = css`\n    display: inline-block;\n    margin-left: 8px;\n    border: 0;\n    background-color: transparent;\n    user-select: none;\n    cursor: pointer;\n    padding: 0 8px;\n    border-radius: 4px;\n    color: #666;\n  `;\n\n  return h.span(\n    css`\n      float: right;\n    `,\n\n    // 一般情况下，显示删除和编辑按钮\n    !info.status ? [\n      h.button(buttonStyle, 'Remove', on('click', () => {\n        // 模拟异步操作\n        info.$update('status', 'removing');\n        setTimeout(() => {\n          // 进入删除动画，动画完成后，才删除条目\n          info.$update('status', 'finish-removing');\n        }, 1000);\n      })),\n      h.button(buttonStyle, 'Edit', on('click', () => {\n        info.$update('status', 'editing');\n      })),\n    ] : null,\n\n    // 编辑状态时，显示保存按钮\n    info.status == 'editing' ? [\n      h.button(buttonStyle, 'Done', on('click', () => {\n        saveContent();\n      })),\n    ] : null,\n\n  );\n}\n\n// 过滤条件选择组件\nfunction Filter(state) {\n  return h.div(\n    css`\n      margin: 8px;\n    `,\n\n    'Filter: ',\n\n    // 每个条件生成一个按钮\n    [\n      { name: 'all', filter: _ => true, },\n      { name: 'todo', filter: i => !i.done },\n      { name: 'done', filter: i => i.done },\n    ].map(info => h.div(\n      info.name, \n      // 显示符合该过滤条件的条目数量\n      () => {\n        const count = Object.keys(state.todos).reduce((acc, cur) => \n          acc + (info.filter(state.todos[cur]) ? 1 : 0), 0);\n        if (count > 0) {\n          return ` (${count}) `;\n        }\n        return null;\n      },\n      css`\n        display: inline-block;\n        border: 1px solid #CCC;\n        padding: 4px 8px;\n        border-radius: 4px;\n        margin-left: 8px;\n        background-color: ${info.name == state.filter ? '#EEE' : 'transparent'};\n        user-select: none;\n        cursor: pointer;\n      `, \n      // 点击时，设定过滤条件\n      on('click', () => {\n        router.navigate(`/filter/${info.name}`);\n      }),\n    )),\n\n  );\n}\n\n// 启动一个 app\nconst app = new App(\n  // 初始渲染的元素\n  document.getElementById('app'),\n  // 初始状态\n  initState,\n  // 根组件\n  Main,\n\n  // 状态更新后，保存一些状态到 local storage\n  on('afterUpdate', (state) => {\n    window.localStorage.setItem('todos-data', JSON.stringify({\n      todos: state.todos,\n      filter: state.filter,\n    }));\n  }),\n);\n\n// 路由\nconst router = new Navigo('/');\nrouter\n  .on('/filter/:filter', (params) => {\n    // 选择过滤器\n    app.update('filter', params.filter);\n  })\n  .resolve();\n\n```\n\n<h2 id=\"installation\">环境安装与配置</h2>\n\n推荐使用的开发环境是 babel + webpack，下面将简单介绍安装及配置方法。\n如果已经熟悉，可以跳过这部分。\n\n如果不喜欢转译器或者构建工具，也可以直接用`<script>`标签引入，lib 目录下是 UMD 格式的库文件。\n\n```bash\n# 创建目录\nmkdir project\ncd project\n\n# npm 初始化\nnpm init -y\n\n# 安装 babel\nnpm install --save-dev babel-core babel-loader babel-plugin-transform-object-rest-spread babel-preset-latest \n# 安装 webpack\nnpm install --save-dev webpack webpack-dev-server \n# 安装 affjs，也就是这个框架\nnpm install --save-dev affjs\n# 示例里用到了 normalize.css 和 animate.css，一并装上\nnpm install --save-dev css-loader style-loader normalize.css animate.css\n```\n\n创建 webpack.config.js 配置文件\n```js\nmodule.exports = {\n  entry: './main.js',\n  output: {\n    filename: 'bundle.js',\n  },\n  devtool: \"source-map\",\n  devServer: {\n    contentBase: __dirname,\n    port: 5000,\n  },\n  module: {\n    loaders: [\n      {\n        test: /\\.js$/,\n        exclude: /node_modules/,\n        loader: 'babel-loader',\n      },\n      { test: /\\.css$/, loader: \"style-loader!css-loader\" },\n    ],\n  },\n}\n```\n\n创建 .babelrc 配置文件\n```json\n{\n \"presets\": [\"latest\"], \n \"plugins\": [\"transform-object-rest-spread\"],\n}\n```\n\n基本的环境就安装配置完成了，下面试一试 hello world。\n\nindex.html 入口 html\n```html\n<!doctype html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <script src=\"bundle.js\"></script>\n  </body>\n</html>\n```\n\nmain.js 入口js\n```js\nimport { App, p } from 'affjs'\n\nnew App(\n  document.getElementById('app'),\n  {},\n  () => p('Hello, world!'),\n);\n\n\n```\n\n启动 webpack 开发服务器\n```bash\n./node_modules/.bin/webpack-dev-server  --inline --hot --watch\n```\n\n如果编译无误，打开 http://localhost:5000/ 可看到 \"Hello, world!\" 字样，即说明环境正常。\n\n现在可以试试前一节的任务列表实例。先装上路由库 navigo：\n\n```bash\nnpm install --save-dev navigo\n```\n\n再将 main.js 的内容替换成任务列表示例代码，重新编译刷新后，就可以看到效果了。\n\n<h2 id=\"app\">App 类</h2>\n\n在环境安装一节，用了一个 hello world 程序来测试环境是否正常：\n\n```js\nimport { App, p } from 'affjs'\n\nnew App(\n  document.getElementById('app'),\n  {},\n  () => p('Hello, world!'),\n);\n\n\n```\n\nApp 类的构造函数有三种参数：\n\n* `document.getElementById('app')` 表示将 id 为 app 的元素作为初次渲染的元素\n* `{}` 表示初始状态，这里是一个空对象\n* `() => p('Hello, world!')` 表示根组件，p 函数表示一个 p 标签，后面会有专门章节讲到\n\n这三种参数可以是任意顺序，构造函数会根据参数类型来判断意义。\nHTMLElement 类型的是初始渲染元素，typeof 运算结果为 'function' 的参数是根组件，还有事件定义等等，后面会讲到。\n其他类型的参数，如对象、数值、数组、字符串等都看作全局状态。当然实际开发中，全局状态一般是一个对象。\n\n参数个数也可以少于三。后续可以用 App.init 方法继续指定初始化参数：\n\n```js\nconst app = new App('Hello, world'); // 只指定全局状态\napp.init(\n  document.getElementById('app'), // 继续指定参数\n  (state) => p(state), // 根组件定义，相当于 `<p>Hello, world</p>`\n);\n```\n\n三种类型的参数都有了之后，才开始渲染。\n\n这个框架里的 App 类，和其他一些框架里的有状态组件类似。\n但因为这个框架里的组件指一个函数，比这个要轻量很多，所以将这个有状态和关联浏览器元素的称作 App。\n\n一个 html 页面可以有多个 App，根据功能和规模来适当划分即可。\n如果两个功能组件之间不需要共享状态，就可以各用一个 App。\n\n除了上述三种参数，还可以用 on 函数注册一些回调，以在某些时机执行一些代码。\n\n例如 beforeUpdate 和 afterUpdate，可以分别在状态更新之前和之后，执行回调：\n\n```js\nimport { App, on } from 'affjs'\n\nconst app = new App(\n  {\n    foo: 0,\n  },\n  on('beforeUpdate', (state, ...args) => {\n    console.log('before update', args);\n  }),\n  on('afterUpdate', (state, ...args) => {\n    console.log('after update', args);\n  }),\n);\n\napp.update('foo', 1);\n\n```\n\n<h2 id=\"tags\">html 标签的表示</h2>\n\n这个框架没有用 html 模板或者 JSX，而是用函数，以及函数的参数来表示 html 的结构和样式等等。\n因为是纯 js 代码，所以不需要预处理器。而且和 hyperscript 这样的表达方式也不一样。\n\n在 hello world 示例中用到了 p 函数来表示一个 p 标签，下面将展开讲述相关的机制。\n\n<h3>基本表示</h3>\n\n最简单的形式，例如一个没有任何属性或子标签的 div 标签，可以这样表示：\n\n```js\nimport { div } from 'affjs'\n\ndiv()\n```\n\n将标签名作为函数名调用就可以了。框架已经预先定义了所有 html 和 svg 的标签，直接 import 相应的标签名就能用了。\n\n上面的 `div()` 相当于 `<div></div>`，其他标签同理。\n\n除了全小写的名字外，也预定义了首字母为大写、全部字母为大写的函数，可以根据喜好选择不同风格：\n\n```js\nimport { div, Div, DIV } from 'affjs'\n\ndiv();\nDiv();\nDIV();\n```\n\n如果需要框架预定义之外的标签名，或者不想每次使用都 import 标签函数，可以用 e 函数：\n\n```js\nimport { e } from 'affjs'\n\ne('div');\n```\n\n作用和前面的是一样的，只不过标签名字作为第一个参数传入。\n\n还可以使用 h 对象，这个对象包含了预定义的标签函数：\n\n```js\nimport { h } from 'affjs'\n\nh.div(); // 相当于 div() 或 e('div')\nh.p;     // 相当于 p() 或 e('p')\nh.Label; // 相当于 label() 或 e('label')\nh.INPUT; // 相当于 input() 或 e('input')\n```\n\n<h3>id 和 class</h3>\n\n表示标签的 id 或者 class，有两种方式。\n\n第一种是使用选择器：\n\n```js\nimport { div, $ } from 'affjs'\n\ndiv($`#the-div .class-a .class-b`)\n```\n\n标签函数传入了一个参数，这个参数是一个 es6 的 tagged template literal，也就是一个带有修饰函数的字符串。\n这个修饰函数是 $，模板字符串的内容是一个选择器。标签则会被加上选择器所表示的 id 以及 class。\n\n上面的表示法相当于：\n```html\n<div id=\"the-div\" class=\"class-a class-b\"></div>\n```\n\n从代码长度也可以看出，用 js 来表示，一般是比 html 要精简一些的。\n\n另外一种表示方式是用一个属性对象：\n\n```js\ndiv({ id: 'the-div', classList: 'class-a class-b' })\n```\n\n这种方式很容易理解，就是将标签的属性，表示成一个对象的属性就可以了。\n\n另外 classList 属性，除了可以用字符串表示，还可以用数组，或者一个对象来表示。\n\n数组方式：\n```js\ndiv({ id: 'the-div', classList: ['class-a', 'class-b'] })\n```\n\n就是将各个 class，写成数组的元素。\n\n对象方式：\n```js\ndiv({ id: 'the-div', classList: {\n  ['class-a']: true,\n  ['class-b']: true,\n}})\n```\n\nclass 作为对象的属性名，当属性值为真时，标签将加入这个 class，非真时不加入。\n\n数组和对象的 class 表示法，在需要动态地增减标签的 class 时，比较方便，因为不需要手工去拼接字符串。\n\n<h3>嵌套标签</h3>\n\n标签可以嵌套，直接将子标签作为参数，传入父标签函数就可以了：\n\n```js\nimport { p, span } from 'affjs'\n\np(span('Hello, '), span('world!'))\n```\n\n相当于：\n```html\n<p><span>Hello, </span><span>world</span></p>\n```\n\n其中 span 标签函数传入的是一个字符串参数，这个参数会被解析成一个文本元素。\n\n也可以将子标签放入一个数组，再传递：\n\n```js\np([span('Hello, '), span('world!')])\n```\n\n上面的代码，效果和前面是一样的，数组的元素都会被视作子标签。\n\n实际上数组里还可以嵌套数组，框架解析的时候会将嵌套的数组平坦化 (flatten)：\n\n```js\np([[[[[[span('Hello, ')]]]]], span('world!')])\n```\n\n上面的代码，表达的仍然是同样的结构。\n\n只有嵌套的标签，才会形成嵌套的结构：\n\n```js\np(span('Hello, ', span('world')))\n```\n\n上面的代码表示的结构就和前面的不同，表示的是：\n```html\n<p><span>Hello, <span>world</span></span></p>\n```\n\n类型为 boolean 和 number 的值，也和 string 类型的值一样，会被视为文本元素：\n\n```js\nul(\n  li(42),\n  li(true),\n)\n```\n\n相当于：\n```html\n<ul>\n\t<li>42</li>\n\t<li>true</li>\n</ul>\n```\n\n类型为 function 的值，会被调用，以返回值作为嵌套的值：\n\n```js\nul(\n  () => span('hello, '),\n  () => 'world!',\n)\n```\n\n相当于：\n```js\n<ul><span>hello, </span>world!</ul>\n```\n\n同样的效果，也可以用 `(() => { ... })()` 实现。但能自动调用的话，写法就简单一些。\n\n<h3>内联 css 样式</h3>\n\n除了可以用 class 来对标签增加样式，还可以直接使用内联的样式。方法也有两种。\n\n第一种和表示选择器的方式类似，用一个 tagged literal 的参数表示样式：\n\n```js\nimport { css, p } from 'affjs'\n\np(css` color: blue; font-weight: bold `, 'Hello, world!')\n```\n\n使用的 tagged 函数为 css，内容是样式定义。\n\n第二种方式是写在属性对象内：\n\n```js\np('Hello, world!', {\n  style: `\n    color: blue;\n    font-weight: bold;\n  `,\n})\n```\n\n和前面用属性对象表示标签的 id 和 class 的方式类似。属性名是 style。\n\n另外使用属性对象方式定义时，style 属性值还可以使用对象：\n\n```js\np('Hello, world!', {\n  style: {\n    color: 'blue',\n    fontWeight: 'bold',\n  },\n})\n```\n\n样式名作为属性名，样式值作为属性值，样式值是字符串或者数字类型。可以根据喜好选择风格。\n\n用 tagged literal 表示样式的好处是，里面可以使用 js 表达式：\n\n```js\nconst color = '#09C';\nconst fontSize = 24;\n\np(css`\n  color: ${color};\n  font-size: ${fontSize}px;\n`, 'Hello, world!')\n```\n\n模板字符串内的 ${} 表示一个 js 表达式。表达式可以是变量、运算、函数调用等等。\n这是相当有用的，对 less、sass 等 css 预处理器的需求也会因此降低。\n\n内联样式是没办法表达伪类的。可以在旁边用一个 style 标签写：\n\n```js\nimport { div, style } from 'affjs'\n\ndiv('.foo')\nstyle(`\n  .foo:hover {\n    /* ... */\n  }\n`)\n```\n\n渲染出来，就是一个`<style></style>`，里面是css定义。\n注意这样定义的样式的优先级比较低，所以如果标签里也有相同的定义，需要用!important才能使伪类的定义生效。\n如果不想使用 !important，可以将内联样式去掉，都写在 script 标签内。\n\n<h3>事件</h3>\n\n标签的事件，可以用 on 函数来表示：\n\n```js\nimport { button, input, on } from 'affjs'\n\nbutton('CLICK ME', on('click', () => {\n  console.log('clicked');\n}))\n\ninput(on('change', () => {\n  console.log('changed');\n}))\n```\n\n或者写在一个表示属性的对象内，作为参数传入：\n\n```js\nbutton('CLICK ME', {\n  onclick() {\n    console.log('clicked');\n  },\n  ondblclick() {\n    console.log('double clicked');\n  },\n})\n```\n\n用上面的方法，同类型的事件，只能设置一个。例如：\n\n```js\nimport { App, button, on } from 'affjs'\n\nnew App(\n  document.getElementById('app'),\n  {},\n  () => button(\n    'CLICK ME',\n    on('click', () => {\n      console.log('foo');\n    }),\n    on('click', () => {\n      console.log('bar');\n    }),\n  ),\n);\n```\n\n点击这个按钮，只会输出 'bar'。输出 'foo' 的回调被覆盖了。\n\n要想让一个事件响应多个回调，可以给事件增加一个子类型。子类型用 `:` 或者 `$` 隔开。例如：\n\n```js\nimport { App, button, on } from 'affjs'\n\nnew App(\n  document.getElementById('app'),\n  {},\n  () => button(\n    'CLICK ME',\n    on('click:foo', () => {\n      console.log('foo');\n    }),\n    on('click:bar', () => {\n      console.log('bar');\n    }),\n    {\n      onclick$baz() {\n        console.log('baz');\n      },\n    },\n  ),\n);\n```\n\n这样点击按钮时，三个回调都会调用，分别输出 'foo', 'bar', 'baz'。\n\n如果不加子类型，默认子类型为 `__default`。也就是 `on('click', ...)` 相当于 `on('click:__default', ...)`。\n\n这样设计的原因是，让事件处理代码变成声明式的，而不是让开发者过程式地手工处理事件 handler。\n\non 函数还可以链式定义，这样能在一个表达式里面表示多个事件：\n\n```js\nimport { App, button, on } from 'affjs'\n\nnew App(\n  document.getElementById('app'),\n  {},\n  () => button(\n    'CLICK ME',\n    on('click:foo', () => {\n      console.log('foo');\n    }).on('click:bar', () => {\n      console.log('bar');\n    }).on('click:baz', () => {\n        console.log('baz');\n    }),\n  ),\n);\n```\n\n在事件回调函数中，可以使用 this.element 获得浏览器元素的引用：\n\n```js\nimport { App, div, button, $inc, } from 'affjs'\n\nconst app = new App(\n  document.getElementById('app'),\n  {\n    count: 0,\n  },\n  Main,\n);\n\nfunction Main(state) {\n  return div(\n    button({\n      // 点击回调\n      onclick() {\n        console.log('onclick', this.element);\n        state.$update('count', $inc);\n      },\n      // 元素创建回调\n      oncreated(elem) {\n        console.log('oncreated', elem);\n      },\n    }, `CLICK ME ${state.count}`),\n  );\n}\n```\n\n注意 oncreated 回调只在元素创建时触发一次，后面框架对元素进行patch操作，改变文本的值，不会创建新元素，就不会再触发oncreated事件。\n这个主要用在和第三方库集成时，需要传递一个浏览器DOM做初始化的场景。\n\n如果需要在每次元素被patch的时候执行回调，可使用 onpatch / onpatched 事件。\n\n还要注意的是，需要用到 this 的时候，回调函数不能用箭头函数 (即 () => {} 这样的)，因为箭头函数的 this 不能绑定，this.element 无效。\n\n<h3>attribute 和 property</h3>\n\n标签的 attributes 和 properties 是同时设置的，方法是将一个对象作为参数传入标签函数。\n除了前面提到过的 id、classList、style、以及 onxxx 等特殊属性名之外，这个对象的属性，会作为标签的属性设置。\n例如：\n\n```js\ndiv({\n  foo: 'FOO',\n  bar: 'BAR',\n})\n```\n\n等价于：\n```html\n<div foo=\"FOO\" bar=\"BAR\"></div>\n```\n\n有一些标签的 attribute 有对应的 property，例如 checkbox 的 checked、及按钮的 disabled 等，为了避免无谓的不一致，所以 attribute 和 property 是同时设置的。\n\n<h3>标签函数的参数</h3>\n\n如上所述，标签函数的参数可以没有，也可以是多个，参数是不定长的。\n每个参数，都会根据上面所讲的规则进行解析，最终定义出这个标签的属性和行为。\n每个参数的效果，是按顺序叠加的。\n\n因此，对标签函数进行包装，就很方便。例如框架自带的 checkbox 标签，是这样定义的：\n\n```js\nconst checkbox = (...args) => e('input', {\n  type: 'checkbox',\n}, ...args);\n```\n\ncheckbox 函数的参数也是不定长的，但传递给 e 函数、构造 input 标签的时候，增加了一个指定 type 属性的参数。\n这样在需要一个 type 为 checkbox 的 input 标签时，就可以直接用 checkbox 函数，而无需传入 type 属性给 input 标签。\n\n前面在嵌套标签一节提到，多个子标签可以放在 array 类型的参数里一起传递，框架会递归地将参数提取出来。\n实际上 array 中的元素不仅仅可以是子标签，事件、属性、样式等类型的元素，也会被视作参数，传入标签函数。\n这个机制对代码的复用和组合很有益。\n\n有些框架也允许使用 hyperscript 或者其他方式手工构造渲染函数，但是它们的参数解析，不是基于对象属性，就是基于参数的位置。\n无论在写法的简洁性，或者在封装的方便性，都有很大的缺陷。\n可以是可以，但这些框架主流还是用 JSX 或者 html 模板，而不是纯 js 表达，设计者并没有花心思来让纯 js 的表达方式变好用。\n\n<h3>skip</h3>\n\n参数列表中，可以使用 skip 来表示忽略它后面的参数，例如：\n\n```js\nimport { div, skip } from 'affjs'\n\ndiv(\n    div('foo'),\n    div('bar'),\n    skip,\n    div('baz'),\n);\n```\n\n相当于\n\n```js\nimport { div, skip } from 'affjs'\n\ndiv(\n    div('foo'),\n    div('bar'),\n    skip,\n);\n```\n\nskip 标志的主要用途是定位 bug。\n\n\n<h2 id=\"component\">组件与组件状态</h2>\n\n在这个框架里，组件与组件状态，就是函数与函数参数。\n\n组件函数的返回值，是上一节所讲的 html 标签，或者另一个组件，或者 null。\n\n组件状态的变化，就是组件函数的实参的变化。\n组件函数的返回值，根据参数的不同而不同，就能反映出组件状态的变化。\n\n组件函数的返回值为 null，表明这个组件的作用不在于表达视觉元素，而是产生一些副作用。\n例如在某些状态变化时，也就是组件参数变化时，根据这些状态计算出另外一些状态并更新全局状态树。\n所以组件函数并不必须是纯函数。\n\n下面是一个简单的组件示例，这个组件是两个按钮和一个标签，它可以显示一个计数器的值，并通过按钮来改变这个计数值：\n\n```js\nimport { App, label, button, div, on } from 'affjs'\n\nconst app = new App(\n  document.getElementById('app'),\n  {\n    n1: 0,\n    n2: 0,\n  },\n  (state) => div(\n    Counter(\n      state.n1,\n      (x) => state.$update('n1', x),\n    ),\n    Counter(\n      state.n2,\n      (x) => state.$update('n2', x),\n    ),\n  ),\n);\n\nfunction Counter(n, update) {\n  return div(\n    button('+', on('click', () => {\n      update(n + 1);\n    })),\n    button('-', on('click', () => {\n      if (n > 0) {\n        update(n - 1);\n      }\n    })),\n    label(n),\n  );\n}\n\n```\n\n上面的示例中，Counter 函数就定义了一个组件。\n根组件使用了两个 Counter 组件的实例，分别关联到 n1 和 n2 两个状态。\n点击其中一个组件的加减按钮，只会影响到它关联的状态，其他同类组件的状态不受影响。\n\nCounter 组件函数的参数，一个是计数值，另一个是改变这个计数值的匿名函数。\n匿名函数里使用到了状态对象的 $update 方法，这个在后面的章节里会详述。\n\n<h2 id=\"thunk\">组件函数调用的优化</h2>\n\n在上面的示例中，根组件使用了两个 Counter 组件。\n而 Counter 是一个函数，Counter 组件用一个函数调用来表示。\n所以每次根组件重新渲染的时候，这两个组件函数都会被调用。\n\nn1 状态改变时，n1 和 n2 关联的 Counter 组件函数都会调用。\nn2 状态改变时也一样，两个 Counter 组件函数都会调用。\n这里可以优化一下。让 n1 状态改变时，只调用 n1 关联的 Counter 组件函数，只更新相关的页面元素。\n因为 n2 状态没有改变，执行 n2 关联的 Counter 组件函数是没有必要的。\n\n这就要引入 thunk 这个概念。\n一个 thunk 代表一个函数调用。\n它不是立即执行的，而是通过对比另一个 thunk 的参数，如果两个 thunk 的参数一样，就不调用，而是直接使用相同参数的 thunk 的执行结果。\n如果 thunk 的参数不一样，就执行函数调用，并将函数的返回值保存好，用于下一次比较。\n\n框架提供了一个 `t` 函数，用于将普通函数调用转化为一个 thunk。\n前面的示例中的根组件，可以改用 thunk：\n\n```js\nconst app = new App(\n  document.getElementById('app'),\n  {\n    n1: 0,\n    n2: 0,\n  },\n  (state) => div(\n    t(Counter,\n      state.n1,\n      (x) => state.$update('n1', x),\n    ),\n    t(Counter,\n      state.n2,\n      (x) => state.$update('n2', x),\n    ),\n  ),\n);\n```\n\n就是将组件函数调用，改成 t 函数调用，并将组件函数作为第一个参数，其他组件参数不变。\nt 函数返回一个 Thunk 类型的对象。\n\n在首次渲染根组件时，因为没有可以比较的 thunk，所以两个 Counter 组件函数都会被调用。\n\n然后点击 n1 关联的某个按钮，引起 n1 状态的变化，触发根组件的重新渲染。\n这次会生成另外两个 thunk，然后各自和上一次渲染时生成的 thunk 比较。\n\nn1 关联的 thunk，因为 state.n1 这个参数发生了变化，所以会重新调用 Counter 组件函数，并在页面上反映出 n1 变化的结果。\n\nn2 关联的 thunk，因为 state.n2 没有变化，传入的匿名函数也没有变化\n（函数类型的参数，只比较它们的名字，匿名函数名字都一样），所以不会调用 Counter 函数。\n\n通过引入 thunk，实现了一个状态的改变，只会触发这个状态关联的组件的更新，不多也不少。\n\n<h2 id=\"state\">全局状态</h2>\n\n在前面的几个示例里，已经用到了全局的状态，作为参数传递给 App 的构造函数。\n\n虽然全局状态可以是其他的类型，但一般全局状态的类型都是对象。\n对象嵌套对象，形成树状的结构，所以又可以称作全局状态树。\n\n程序的状态统一保存在一个对象里，有几个好处：\n* 方便将状态持久化及反持久化；\n* 方便审查当前整个程序的状态；\n* 方便记录并查看状态的变化过程；\n* 方便 mock 状态，有利于排错及测试。\n\n将源自全局状态树的值，作为组件函数的参数，就能让组件实例关联到状态树中的一个或者多个状态。\n\n<h2 id=\"update\">状态的更新</h2>\n\n程序状态必然需要更新，而且状态更新前后，框架需要做一些额外的工作。\n所以想要更新状态，不能直接对状态树进行赋值操作，而是调用 App 实例的 update 函数。\n\nupdate 方法的参数，先是指定一个更新的路径，最后是要执行的操作。\n更新的路径，就是从根状态对象开始，到达某个子状态所经过的属性名或者数组下标。\n\n例如 `state.a.b.c[1][2]` 所指向的状态，它的更新路径是 `'a', 'b', 'c', 1, 2`。\n\n示例：\n\n```js\nimport { App, div } from 'affjs'\n\nconst app = new App(\n  // 初始状态\n  {\n    n: 0,\n  },\n  // 不要初始元素和根组件，也可以进行状态操作\n);\n\n// 路径为 'n'，用字符串表示属性名\n// 最后一个参数为 1，表示更新该路径对应的属性值为 1\napp.update('n', 1);\n// 输出 1\nconsole.log(app.state.n); \n```\n\n嵌套的对象，用多个属性名字符串表示路径：\n\n```js\nimport { App, div } from 'affjs'\n\nconst app = new App(\n  {\n    foo: {\n      bar: {\n        baz: 0,\n      },\n    },\n  },\n);\n\n// 表示 app.state.foo.bar.baz 更改为 42\napp.update('foo', 'bar', 'baz', 42);\n// 输出 42\nconsole.log(app.state.foo.bar.baz); \n```\n\n同时更新多条路径，用 updateMulti 方法：\n\n```js\nimport { App, div } from 'affjs'\n\nconst app = new App(\n  {\n    n: 0,\n    foo: {\n      bar: {\n        baz: 0,\n      },\n    },\n  },\n);\n\n// 更新多条路径，各个参数列表作为 array 传入\napp.updateMulti(\n  ['n', 1],\n  ['foo', 'bar', 'baz', 42],\n);\n// 输出 1 和 42\nconsole.log(app.state.n);\nconsole.log(app.state.foo.bar.baz); \n```\n\n路径也可以是一个函数，这个函数的参数是属性名，返回值如果为 true，表示匹配这个属性名对应的路径，为 false 表示不匹配。示例：\n\n```js\nimport { App, div, $inc } from 'affjs'\n\nconst app = new App(\n  // 初始状态为数组\n  [1, 2, 3, 4, 5, 6, 7, 8],\n);\n\napp.update(\n  // 匹配索引大于等于 2 的路径\n  index => index >= 2,\n  // 自增\n  $inc,\n);\n\n// 输出 [1, 2, 4, 5, 6, 7, 8, 9]\n// 索引大于等于 2 的元素，都 +1 了\nconsole.log(app.state);\n```\n\n上面 update 调用的最后一个参数不是要更新的值，而是一个操作符。\n$inc 这个操作符表示的是将数值的状态更新为 +1 的值。\n\n除了 $inc，还有 $dec，表示 -1：\n\n```js\nimport { App, div, $dec } from 'affjs'\n\nconst app = new App(\n  [1, 2, 3, 4, 5, 6, 7, 8],\n);\n\napp.update(\n  index => index >= 2,\n  $dec,\n);\n\n// 输出 [1, 2, 2, 3, 4, 5, 6, 7]\nconsole.log(app.state);\n```\n\n$func 操作符可以接受一个函数参数，状态将作为参数传入这个函数，这个函数的输出将作为更新值：\n\n```js\nimport { App, div, $func } from 'affjs'\n\nconst app = new App(\n  [1, 2, 3, 4, 5, 6, 7, 8],\n);\n\napp.update(\n  index => index >= 2,\n  $func(x => x * x),\n);\n\n// 输出 [1, 4, 9, 16, 25, 36, 49, 64]\nconsole.log(app.state);\n```\n\n框架还提供了 Array 的一些方法：\n* $push\n* $unshift\n* $splice\n* $fill\n* $sort\n* $filter\n* $map\n\n上面这些操作符的参数和同名的 Array 方法是一样的。\n\n下面这些 Array 操作符不需要参数：\n* $pop\n* $shift\n* $reverse\n\n另外还有 $delete 操作符，作用和 js 的 delete 操作符一样，参数是属性名。\n\n最后是 $merge 操作符，用于合并另一个对象的属性：\n\n```js\nimport { App, $merge, $inc } from 'affjs'\n\nconst app = new App({\n  foo: {\n    bar: 'bar',\n    baz: 'baz',\n    qux: 1,\n  },\n});\n\napp.update($merge({\n  foo: {\n    bar: 'BAR',\n    baz: 'BAZ',\n    qux: $inc,\n  },\n}));\n\n// 上面的 update 相当于\napp.updateMulti(\n  ['foo', 'bar', 'BAR'],\n  ['foo', 'baz', 'BAZ'],\n  ['foo', 'qux', $inc],\n);\n```\n\n也就是递归遍历对象，将属性名作为路径，将非对象类型的属性作为更新操作。\n\n所以在使用 $merge 时需要注意，对象都是看作表达路径的。\n如果更新操作是替换成另一个对象，需要用 `$func(_ => newObject)` 包装起来，避免将对象解构成路径。\n\n另外，框架还提供了一个 op 对象，上面所有的操作符可以通过它来引用：\n\n```js\nimport { App, op } from 'affjs'\n\nconst app = new App({\n  foo: {\n    bar: 'bar',\n    baz: 'baz',\n    qux: 1,\n  },\n});\n\napp.update(op.merge({\n  foo: {\n    bar: 'BAR',\n    baz: 'BAZ',\n    qux: op.inc,\n  },\n}));\n\n```\n\n<h2 id=\"state-object-update\">状态对象的 $update 方法</h2>\n\n前一节介绍了 App 类的 update 方法。实际上初始状态对象的每个子对象，都设置了一个 $update 方法，用于更新这个子对象。\n\n$update 方法的参数和 App.update 方法类似。不同之处是，路径是以该对象的路径为根路径。\n\n示例：\n\n```js\nimport { App } from 'affjs'\n\nconst app = new App({\n  foo: {\n    bar: {\n      baz: {\n        qux: 'QUX',\n      },\n    },\n  },\n});\n\n// App 的 update 方法\napp.update('foo', 'bar', 'baz', 'qux', 'new QUX');\n\n// 子状态对象的 update 方法\nconst childState = app.state.foo.bar.baz;\nchildState.$update('qux', 'New QUX');\n```\n\n$update 方法的一个好处是，使组件代码里不出现 app 的引用，避免与具体的 app 实例耦合，从而保证组件的可复用性。\n\n$update 方法在调用时，最终也是调用 App.update 方法，影响的是全局的状态。所以是结合了组件本地状态和全局状态两种风格的优点。\n\n框架会将所有进入状态树的对象都加上 $update 方法。\n这会带来一些开销。如果这些对象不需要更新，不需要这两个方法，可以用 readOnly 函数标记一下。\n将对象作为参数传入即可，返回的对象会带上只读标记，框架不会为对象加上这两个方法。\n\n另外，因为一个状态对象只会记录一个路径，所以一个对象的路径设定好之后，就不能变更了。\n如果将一个已经设定了路径的对象，更新到状态树的其他路径，框架将会报错。\n解决方法是避免在不同路径引用到同一个对象。或者在更新时使用 readOnly 函数标记该对象，这样就会跳过路径的检查。\n\n\n<h2 id=\"state-passing\">组件状态的传递</h2>\n\n与“状态树”这个概念类似，组件嵌套子组件，可以形成一颗“组件树”。\n\n各个组件的状态，是从根组件开始，逐层传递到的。\n所有子组件的状态，都需要从父组件接受的状态里得到。\n\n必须这样做的原因是，子组件的渲染和更新过程，是父组件渲染和更新过程的一部分。\n如果子组件使用了某个状态，但是没有传递给父组件，那这个状态改变时，不会引起父组件的更新，也就不会引起子组件的更新。\n\n将状态传递给多层嵌套的组件时，需要将状态传入路径上所有的组件，示例：\n\n```js\nimport { App, div, t } from 'affjs'\n\nconst app = new App(\n  document.getElementById('app'),\n  {\n    foo: 'FOO',\n  },\n  Main,\n);\n\nfunction Main(state) {\n  return t(OutterWrapper, {\n    foo: state.foo,\n  });\n};\n\nfunction OutterWrapper(state) {\n  return t(Wrapper, {\n    foo: state.foo,\n  });\n};\n\nfunction Wrapper(state) {\n  return t(InnerWrapper, {\n    foo: state.foo,\n  });\n};\n\nfunction InnerWrapper(state) {\n  return t(Element, {\n    foo: state.foo,\n  });\n};\n\nfunction Element(state) {\n  return div(state.foo);\n}\n\n\n```\n\nElement 需要 foo 状态，所以要从 Main -> OutterWrapper -> Wrapper -> InnerWrapper -> Element 这样逐层传递。\n\n<h3>引用父状态</h3>\n\nElement 如果需要多一个状态，那就要改动多处代码，逐层增加。减少一个状态也是一样，需要改动多处。相当不便。\n\n框架对这种情况，提供了一个解决办法。先看最终的代码：\n\n```js\nimport { App, div, t, ref } from 'affjs'\n\nconst app = new App(\n  document.getElementById('app'),\n  {\n    foo: 'FOO',\n    OutterWrapper: {\n      Wrapper: {\n        InnerWrapper: {\n          Element: {\n            foo: ref('foo'),\n          },\n        },\n      },\n    },\n  },\n  Main,\n);\n\nfunction Main(state) {\n  return t(OutterWrapper, state.OutterWrapper);\n};\n\nfunction OutterWrapper(state) {\n  return t(Wrapper, state.Wrapper);\n};\n\nfunction Wrapper(state) {\n  return t(InnerWrapper, state.InnerWrapper);\n};\n\nfunction InnerWrapper(state) {\n  return t(Element, state.Element);\n};\n\nfunction Element(state) {\n  return div(state.foo);\n}\n\n\n```\n\n可以看出，传递给各个子组件的状态，定义在了初始状态里。\n而且这些子状态的属性名，都与组件名相同，表明这是一个将传递给相应组件的状态。\n在传递的时候，直接传递相应的子状态就可以了。\n组件树和状态树的结构相同，就可以有这个便利。\n\n另外，Element 组件的状态的 foo 成员，定义为 `ref('foo')`，代表它是一个引用。\n它的意思是，向上寻找一个名为 foo 的状态，并逐层传递到这个状态对象里。\n也就是说，OutterWrapper、Wrapper、InnerWrapper、Element 对应的这些状态对象，都会有一个 foo 属性，而且属性值和最外层的 foo 相同。\n这就避免了手工逐层传递。\n\n如果 Element 需要多一个状态，只需要增加相应的引用即可。\n中间所有的组件的代码都不需要改动。\n删除一个状态同理。\n\n引用会从最内层，向最外层查找，直到根状态。如果到根状态都没有找到，就会抛出异常。\n查找是初始化 App 的时候做的，不是在读取状态的时候。\n所以从一开始就要在初始状态里定义好相关的状态。\n\n引用的解析也只会在 App 初始化时做一次，后面 update 进状态树的不会解析。\n因为解析引用开销比较大，如果更新一个大对象，就算不包含引用标记，也要进行解析的话，对性能影响比较大。\n\n<h3>引用状态的直接赋值</h3>\n\n包含引用属性的对象，直接对该属性赋值，可以改变引用指向的状态：\n\n```js\nimport { App, ref } from 'affjs'\n\nconst app = new App(\n    {\n      foo: 'foo',\n      Sub: {\n        foo: ref('foo'),\n      },\n    },\n);\n\n// 直接对 Sub.foo 赋值\napp.state.Sub.foo = 'FOO';\n// 更新的是外层的 foo 状态\nconsole.log(app.state.foo);\n\n```\n\n因为 Sub.foo 指向的是一个字符串，是没有 $update 方法的，所以唯一更新它指向的状态的方式，也是直接赋值。\n\n<h3>弱引用状态</h3>\n\n引用一个状态，就代表引用指向的状态发生变化时，当前状态所关联的组件，也会重新渲染。\n但有的时候，组件需要读或者写某个父状态，但又不需要观察它的变化，就要用到“弱引用”这个机制。\n\n定义弱引用和定义引用类似，但函数使用的是 weakRef：\n\n```js\nimport { App, weakRef, t, h, on } from 'affjs'\n\nconst app = new App(\n    document.getElementById('app'),\n    {\n      foo: 'foo',\n      Element: {\n        foo: weakRef('foo'),\n      },\n    },\n    Main,\n);\n\nfunction Main(state) {\n  return h.div(\n      t(Element, state.Element),\n\n      h.button('change foo', on('click', () => {\n        state.$update('foo', 'FOO');\n      })),\n\n      h.span(state.foo),\n  );\n}\n\nfunction Element(state) {\n  return h.span(state.foo);\n}\n\n```\n\nElement 组件引用了 foo 状态，但这是一个弱引用。\n所以 Element 组件会渲染出 'foo'，点击按钮后，foo 状态更新为 'FOO'，但 Element 组件不会更新，因为它不会观察一个弱引用的状态。\n\n当然，如果有其他方式触发 Element 组件的重渲染，它仍会渲染出当前的 foo 状态。\n\n再来看一个这个机制的应用例子：\n\n```js\nimport { App, h, t, on, weakRef, op } from 'affjs'\n\nconst app = new App(\n    document.getElementById('app'),\n    {\n      list: [1, 2, 3, 4, 5, 6, 7, 8],\n      Elem: {\n        list: weakRef('list'),\n      },\n    },\n    Main,\n);\n\nfunction Main(state) {\n  return h.ul(\n      state.list.map((v, i) => t(Elem, state.Elem, v, i)),\n  );\n}\n\nfunction Elem(state, v, i) {\n  return h.li(\n      h.span(v),\n      h.button('X', on('click', () => {\n        state.list.$update(op.splice(i, 1));\n      })),\n  );\n}\n\n```\n\nElem 组件有一个删除按钮，可以删除列表里对应的元素。\n\n显然 Elem 组件需要引用 list 状态，才能对它进行 splice 操作。\n但是如果将 list 状态作为引用传入 Elem 组件，那每次 list 发生变化时，都要重新渲染所有 Elem 组件。这是很不经济的。\n\n弱引用就能发挥作用了，Elem 组件可以读写 list 状态，但 list 状态变化时，不会触发不必要的组件重渲染。\n\n和强引用一样，可以对弱引用直接赋值，以更新指向的状态。\n\n<h3>列表元素的传递</h3>\n\n渲染一个列表是很常见的场景，框架提供了一个模式来处理。例如渲染一个用户列表：\n\n```js\nimport { App, h, t, op, cached, wrap, css, on } from 'affjs'\n\nconst state = {\n  users: {\n    1: {\n      name: 'Foo',\n    },\n    2: {\n      name: 'Bar',\n    },\n    3: {\n      name: 'Baz',\n    },\n  },\n  userIds: [1, 2, 3],\n\n  User: cached(function(userId) {\n    const user = this.users[userId];\n    return wrap(user, {\n\n      tag: () => {\n        user.$update('tagged', op.func(tagged => !tagged));\n      },\n    });\n  }),\n};\n\nfunction Main(state) {\n  return h.div(\n      state.userIds.map(id => t(User, state.User(id))),\n  );\n}\n\nfunction User(state) {\n  return h.div(\n      h.span(state.name),\n      on('click', () => {\n        state.tag();\n      }),\n      css`\n        color: ${state.tagged ? 'blue' : 'black'};\n        user-select: none;\n        cursor: pointer;\n      `,\n  );\n}\n\nconst app = new App(\n    document.getElementById('app'),\n    state,\n    Main,\n);\n\n```\n\n和上一节的 Elem 状态不同，上面定义的 User 状态是 cached(function(userId) { ... })。\n使用的时候，用的是 t(User, state.User(id))，说明 cached 返回的是一个函数，而且这个函数的参数，和传入 cached 的函数，是一样的。\n\n实际上，去掉 cached()，这样传递状态的方法，可能更好理解。就是遍历用户 id，并将 id 传入 User 函数，得到对应的用户信息，作为组件的参数。\n\ncached 的作用是，将 User 函数的结果缓存起来，下一次传入相同的 id，就返回上一次调用的结果，而不需要重新调用。\n因为 User 每次调用都是返回一个新的状态对象，所以会导致不必要的重渲染，用 cached 就可以避免。\n\nUser 函数首先通过 this.users[userId] 获得用户信息。函数中的 this，指向的是 User 属性所在的对象，这和 js 对象的函数类型的属性的绑定规则是一致的。\n\nUser 函数返回的是 wrap(user, { tag: ... })，代表 User 组件的状态，除了用户信息之外，还包括一个 tag 方法，用于改变 tagged 这个状态的值。\n\nwrap 实际是创建了一个以 user 为原型的对象，并融合第二个参数的各个属性。\n所以传入 User 组件的状态对象，会包含 user 的各个属性及方法（例如 $update 方法），以及扩展的 tag 方法。\n\n如果 User 组件不需要 tag 等扩展的方法，可以直接返回 user 变量，不加 wrap。\n\n<h2 id=\"default-and-derived-state\">默认状态及衍生状态</h2>\n\n设置默认状态，最简单的方法是写在初始状态里：\n\n```js\nconst init_state = {\n  sort_by: 'timestamp',\n};\n```\n\n或者写在组件函数里：\n\n```js\nconst List = (state) => {\n  if (!state.sort_by) {\n    state.$update('sort_by', 'timestamp');\n  }\n  return div();\n};\n```\n\n衍生状态，指将某些状态通过一定运算得出的状态，可以在初始状态里用getter实现：\n\n```js\nconst init_state = {\n  r: 0,\n  g: 0,\n  b: 0,\n  // 在组件里可以用 state.rgb 获得计算出来的值\n  get rgb() {\n    return `rgb(${this.r}, ${this.g}, ${this.b})`;\n  },\n};\n```\n\n但上面的方法只适合计算量少的，如果计算量很大，应该用下面的方法：\n\n```js\nimport { App, div, t, ref } from 'affjs'\n\nconst app = new App(\n  document.getElementById('app'),\n\n  {\n    r: 0,\n    g: 0,\n    b: 0,\n    rgb: '',\n\n    MaintainRGB: {\n      r: ref('r'),\n      g: ref('g'),\n      b: ref('b'),\n    },\n  },\n\n  Main,\n);\n\nfunction Main(state) {\n  return div(\n    t(MaintainRGB, state.MaintainRGB, (newVal) => {\n      state.$update('rgb', newVal);\n    }),\n\n    div(state.rgb),\n  );\n}\n\nfunction MaintainRGB(state, update) {\n  update(`rgb(${state.r}, ${state.g}, ${state.b})`);\n  return null;\n}\n\n```\n\n上面的示例，在第一次渲染时，会更新 rgb 这个状态。\n以后只在 r、g、b 这三个状态更新的时候，才更新 rgb。\n\nMaintainRGB 这个组件并没有视觉上的作用，而是用于观察 r、g、b 这三个状态。\n当被观察的状态改变时，执行一些动作，这里是更新另一个状态，使其保持一致。\n\n用这种模式可以实现很复杂的关联计算，衍生的状态本身也可以被其他衍生状态观察，而这些都是定义好，就不需要操心的了，框架会自动计算好。\n\n\n<h2 id=\"reusable\">代码复用</h2>\n\n在这个框架里，可以复用的代码单元不仅仅是组件，还有其他方式的。\n\n<h3>复用标签函数的参数</h3>\n\n标签函数的参数，可以是嵌套的子标签、标签属性（包括 id、class 等）、事件回调、样式定义等等。\n这些参数都是用 js 的表达式表示，所以可以很自然地复用。示例：\n\n```js\nimport { App, div, span, on, button, $inc, css } from 'affjs'\n\nconst app = new App(\n  document.getElementById('app'),\n  {\n    n: 0,\n  },\n  (state) => {\n    // 共同的行为，点击 +1\n    const clickToAddOne = on('click:click-to-add', () => {\n      state.$update('n', $inc);\n    });\n    // 共同的样式定义\n    const buttonStyle = css`\n      border: 1px solid grey;\n      background-color: white;\n      border-radius: 10px;\n      margin: 0 5px;\n    `;\n    return div(\n      // 三个按钮，拥有共同的点击行为和基本样式\n      button(clickToAddOne, buttonStyle, 'Button A'),\n      button(clickToAddOne, buttonStyle, 'Button B'),\n      button(clickToAddOne, buttonStyle, 'Button C',\n        // 在共同样式之外，可以定义独特的样式\n        css`\n          font-weight: bold;\n          color: #09C;\n        `,\n      ),\n      // 显示计数\n      span(state.n),\n    );\n  },\n);\n```\n\n上面的例子里，clickToAddOne 和 buttonStyle 就是可复用的单元，粒度比组件要小。\n\n标签函数的参数，如果为数组类型，数组的元素会被取出，作为参数处理 (也就是数组会被 flatten)。\n所以 clickToAddOne 和 buttonStyle 也可以合而为一：\n\n```js\nimport { App, div, span, on, button, $inc, css } from 'affjs'\n\nconst app = new App(\n  document.getElementById('app'),\n  {\n    n: 0,\n  },\n  (state) => {\n    // 合并行为和样式定义\n    const buttonCommon = [\n      on('click:click-to-add', () => {\n        state.$update('n', $inc);\n      }),\n      css`\n        border: 1px solid grey;\n        background-color: white;\n        border-radius: 10px;\n        margin: 0 5px;\n      `,\n    ];\n    return div(\n      // 用 buttonCommon 替代 clickToAddOne 和 buttonStyle\n      button(buttonCommon, 'Button A'),\n      button(buttonCommon, 'Button B'),\n      button(buttonCommon, 'Button C',\n        css`\n          font-weight: bold;\n          color: #09C;\n        `,\n      ),\n      span(state.n),\n    );\n  },\n);\n```\n\n<h3>样式定义的复用</h3>\n\n样式定义有两种方式，一种是对象式，一种是字符串式。\n现代的 js 特性使得这两种方式的代码复用，都可以方便地实现。\n\n对象式，可以用 object spread 语法：\n\n```js\nimport { App, div } from 'affjs'\n\n// 可复用的样式\nconst cardStyle = {\n  margin: '5px',\n  padding: '5px',\n  border: '1px solid #CCC',\n};\n\nconst app = new App(\n  document.getElementById('app'),\n  {},\n  (state) => div(\n    {\n      // object spread 语法\n      style: {...cardStyle,\n        color: '#333',\n        textAlign: 'center',\n      },\n    },\n    'Hello, world!',\n  ),\n);\n```\n\n字符串式，可以用 ${...} 插入表达式：\n\n```js\nimport { App, div, css } from 'affjs'\n\n// 可复用样式，注意这里并不需要加 css 标签，因为只是作为字符串插入\nconst cardStyle = `\n  margin: 5px;\n  padding: 5px;\n  border: 1px solid #CCC;\n`;\n\nconst app = new App(\n  document.getElementById('app'),\n  {},\n  (state) => div(\n    // cardStyle 作为字符串直接插入\n    css`\n      ${cardStyle}\n      text-align: center;\n      color: #333;\n    `,\n    'Hello, world!',\n  ),\n);\n```\n\n注意对象式和字符串式定义不能在同一个标签函数内混用。\n因为没法简单地合并。\n\n因为这个框架讲求用纯 js 代码来表达，所以，任何 js 可以用的代码复用方式，都可以应用上。\n\n\n<h2 id=\"routing\">路由</h2>\n\n这个框架没有实现路由功能，因为使用的是纯 js，所以集成使用第三方路由库是轻而易举的事情。\n也不需要什么封装，选一个喜欢的三方库使用即可。\n\n最开始的 任务列表 示例里，使用了 navigo 这个路由库，可以作为参考。\n\n要点是，在路由关联的回调里，改变状态树的某些值，然后根据这些值，渲染出不同的组件。\n可以将路由信息理解为，持久化了的一些子状态。\n\n<h2 id=\"debug-panel\">调试面板</h2>\n\n框架自带了一个简易的信息面板，可以显示当前状态树，以及状态树的变更历史。使用方法：\n\n```js\nimport { App, css, div, span, DebugPanel } from 'affjs'\n\nconst app = new App(\n  document.getElementById('app'),\n  // 状态\n  {\n    foo: 0,\n    bar: [1, 2, 3],\n    baz: {\n      a: 'baz',\n      b: 'Baz',\n      c: 'BAZ',\n    },\n  },\n  // 根组件\n  (state, app) => div(\n\n    // 显示状态\n    div('foo: ', state.foo),\n    div('bar: ', state.bar.map(num => span(num, css`\n      padding: 0 10px;\n    `))),\n    () => {\n      const ret = [\n        div('baz: '),\n      ];\n      for (const key in state.baz) {\n        ret.push(div(key, ' = ', state.baz[key]));\n      }\n      return ret;\n    },\n\n    // 引入调试面板\n    DebugPanel(app, {\n      // 默认是不显示的，配置成显示\n      show: true,\n      // 默认是占满页面，配置成露出左边\n      left: '30%',\n    }),\n  ),\n);\n\napp.update('foo', $inc);\napp.update('bar', $map(v => v * 2));\napp.update('baz', 'b', 'baZ');\n\n```\n\n![debug-panel](images/debug-panel.png)\n\n![debug-panel](images/debug-panel2.png)\n\n按 ctrl + q 可以切换显示与隐藏状态。\n\n当前状态，在 state 标签页；更新记录，在 updates 标签页。左下角的按钮用于调整位置。\n\n\n<h2 id=\"async-race\">异步竞态问题</h2>\n\n竞态发生在异步更新状态的时候，如果当前的一些状态和异步操作发起时不同，更新的结果就可能不是开发者预期中的了。\n\n例如前面举的衍生状态的例子，如果衍生状态不是同步更新，而需要发起一次异步操作，操作返回之后再更新，那衍生状态就可能和当前状态不对应了。\n\n又或者在异步返回时更新一个array中的元素，如果使用下标作为update路径，而列表在异步发起而未返回时更新了，那可能会更新了错误的元素。\n\n解决办法有几种：\n\n一是在异步操作返回，更新操作执行前，检查一下当前的状态，再决定是否更新。\n例如异步衍生状态在更新前检查一下，依赖的状态是否发生了变化，如果变化了，就不更新，没有变化就更新。\n\n二是设法使不同的异步操作更新不同的状态路径。还是衍生状态的例子，异步返回时，按照依赖的状态的不同，更新到不同的路径上。\n\n三是避免使用列表下标作为更新路径，用元素的唯一标识。这样一个列表就需要一个 {} 和 []，各自保存元素状态和元素顺序。\n\n\n<h2 id=\"todomvc-and-dbmon\">代码示例：todomvc 和 dbmon</h2>\n\n[todomvc](http://todomvc.com/) 和 [dbmon](http://mathieuancelin.github.io/js-repaint-perfs/) 是各类前端框架实现得比较多的例子。\n在 examples 目录下也有用本框架实现它们的示例代码：\n\ntodomvc: https://github.com/reusee/aff/blob/master/examples/todomvc/main.js\n* <a href=\"http://reusee.github.io/todomvc/index.html\" target=\"_blank\">todomvc 的在线 demo</a>\n\ndbmon: https://github.com/reusee/aff/blob/master/examples/dbmon/main.js\n* <a href=\"http://reusee.github.io/dbmon/index.html\" target=\"_blank\">dbmon 的在线 demo</a>\n\n\n","maintainers":[{"name":"reus","email":"reusee@gmail.com"}],"time":{"modified":"2022-06-13T02:29:10.202Z","created":"2016-12-07T17:17:02.572Z","0.0.1":"2016-12-07T17:17:02.572Z","0.0.2":"2016-12-08T18:33:31.110Z","0.0.3":"2016-12-09T13:01:28.794Z","0.0.4":"2016-12-09T14:03:39.123Z","0.0.5":"2016-12-09T17:54:26.098Z","0.0.6":"2016-12-09T18:40:25.563Z","0.0.7":"2016-12-09T19:05:17.577Z","0.0.8":"2016-12-09T19:12:13.158Z","0.0.9":"2016-12-10T06:33:18.313Z","0.0.10":"2016-12-10T14:16:04.680Z","0.0.11":"2016-12-10T14:28:17.031Z","0.0.12":"2016-12-10T14:38:09.987Z","0.0.13":"2016-12-10T18:46:44.665Z","0.0.14":"2016-12-10T19:09:16.745Z","0.0.15":"2016-12-10T20:58:37.903Z","0.0.16":"2016-12-11T17:33:28.986Z","0.0.18":"2016-12-11T18:54:51.525Z","0.0.19":"2016-12-12T04:45:05.815Z","0.0.20":"2016-12-12T06:11:49.713Z","0.0.21":"2016-12-12T12:38:35.341Z","0.0.22":"2016-12-12T12:41:32.113Z","0.0.23":"2016-12-12T12:43:19.772Z","0.0.24":"2016-12-12T20:01:16.733Z","0.0.25":"2016-12-12T20:09:46.425Z","0.0.27":"2016-12-12T21:09:02.364Z","0.0.28":"2016-12-13T06:32:21.555Z","0.0.29":"2016-12-13T06:43:32.669Z","0.0.30":"2016-12-13T09:24:18.748Z","0.0.31":"2016-12-13T20:21:11.562Z","0.0.32":"2016-12-14T05:47:27.189Z","0.0.33":"2016-12-14T14:06:51.381Z","0.0.35":"2016-12-15T05:17:34.167Z","0.0.36":"2016-12-15T09:21:26.238Z","0.0.37":"2016-12-15T10:01:24.233Z","0.0.38":"2016-12-15T10:28:04.717Z","0.0.39":"2016-12-15T17:18:08.274Z","0.0.40":"2016-12-15T20:06:52.316Z","0.0.41":"2016-12-17T20:43:23.102Z","0.0.42":"2016-12-18T06:51:49.886Z","0.0.43":"2016-12-19T09:47:54.155Z","0.0.44":"2016-12-19T11:34:49.316Z","0.0.45":"2016-12-19T12:54:32.023Z","0.0.46":"2016-12-19T13:03:03.718Z","0.0.47":"2016-12-19T13:28:46.455Z","0.0.48":"2016-12-19T13:42:28.381Z","0.0.49":"2016-12-19T13:53:35.076Z","0.0.50":"2016-12-19T14:19:00.805Z","0.0.51":"2016-12-20T06:32:59.903Z","0.0.52":"2016-12-20T09:20:46.920Z","0.0.54":"2016-12-21T09:27:12.576Z","0.0.55":"2016-12-21T10:27:51.499Z","0.0.56":"2016-12-21T10:33:23.016Z","0.0.57":"2016-12-21T13:01:32.144Z","0.0.58":"2016-12-21T13:22:35.121Z","0.0.59":"2016-12-21T14:10:06.171Z","0.0.60":"2016-12-21T16:34:45.368Z","0.0.61":"2016-12-22T06:36:25.512Z","0.0.62":"2016-12-22T14:39:13.109Z","0.0.63":"2016-12-22T21:14:37.890Z","0.0.64":"2016-12-23T13:24:39.398Z","0.0.66":"2016-12-24T11:13:11.100Z","0.0.67":"2016-12-24T13:36:28.506Z","0.0.68":"2016-12-24T13:49:21.443Z","0.0.69":"2016-12-24T13:52:15.794Z","0.0.70":"2016-12-25T09:32:51.234Z","0.0.71":"2016-12-25T10:14:28.464Z","0.0.72":"2016-12-25T17:40:11.277Z","0.0.73":"2016-12-25T20:29:20.403Z","0.0.74":"2016-12-26T17:44:25.820Z","0.0.75":"2016-12-27T13:27:13.845Z","0.0.76":"2016-12-27T17:28:43.532Z","0.0.77":"2016-12-29T09:43:23.755Z","0.0.78":"2016-12-29T18:00:30.077Z","0.0.79":"2016-12-29T18:16:00.347Z","0.0.80":"2016-12-31T10:33:00.618Z","0.0.81":"2016-12-31T11:21:57.863Z","0.0.82":"2016-12-31T17:38:30.725Z","0.0.83":"2016-12-31T18:05:01.464Z","0.0.84":"2017-01-01T12:16:05.512Z","0.0.85":"2017-01-03T06:29:27.777Z","0.0.86":"2017-01-03T06:47:16.690Z","0.0.87":"2017-01-03T15:23:00.268Z","0.0.88":"2017-01-03T15:46:15.613Z","0.0.89":"2017-01-03T16:13:34.853Z","0.0.90":"2017-01-03T18:21:36.358Z","0.0.91":"2017-01-04T11:49:37.656Z","0.0.92":"2017-01-05T08:38:13.220Z","0.0.93":"2017-01-05T08:54:02.067Z","0.0.94":"2017-01-05T13:23:34.862Z","0.0.95":"2017-01-05T15:19:32.273Z","0.0.96":"2017-01-05T15:32:08.812Z","0.0.97":"2017-01-05T15:45:15.971Z","0.0.98":"2017-01-08T11:59:25.271Z","0.0.99":"2017-01-08T16:36:41.003Z","0.0.100":"2017-01-09T11:45:39.886Z","0.0.101":"2017-01-12T03:07:30.012Z","0.0.105":"2017-01-16T06:04:30.129Z","0.0.106":"2017-01-16T07:52:57.878Z","0.0.108":"2017-01-17T14:08:57.880Z","0.0.109":"2017-01-25T15:56:06.086Z","0.0.110":"2017-01-31T14:37:38.032Z","0.0.111":"2017-02-01T02:11:11.086Z","0.0.114":"2017-02-12T04:41:09.325Z","0.0.115":"2017-02-23T03:03:17.198Z","0.0.116":"2017-02-25T05:16:09.896Z","0.0.117":"2017-03-04T06:12:41.680Z","0.0.118":"2017-03-05T06:06:19.196Z","0.0.119":"2017-03-05T06:14:02.226Z","0.0.121":"2017-03-07T03:11:17.529Z"},"keywords":[],"author":{"name":"reus"},"readmeFilename":"README.md","homepage":"https://github.com/reusee/aff#readme","repository":{"type":"git","url":"git+https://github.com/reusee/aff.git"},"bugs":{"url":"https://github.com/reusee/aff/issues"},"license":"Apache"}