{"_id":"project-router","_rev":"38-87066df3a5bd97c2e54b145c46fb8526","name":"project-router","dist-tags":{"latest":"0.1.8"},"versions":{"0.0.1":{"name":"project-router","version":"0.0.1","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"supertest":"^0.10.0","chai":"^1.9.1","mocha":"^1.18.2","sinon":"^1.9.1","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","_id":"project-router@0.0.1","_shasum":"f9b31d6c9ee949a0775e594cb356d785f59990d0","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"f9b31d6c9ee949a0775e594cb356d785f59990d0","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.0.1.tgz","integrity":"sha512-nQfZQNFXnpV5wIizNGgK5nSVJHbeGxWAQl+8KkuKox/p+OMmtolKEcLnDcgJLrGTh0DzY8LnZoIOPHgT30RP4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYF74UjGBezUsf/Gyz/0iVWjHyTZi8Ih3kMA1hSR7JTwIhAJ2p86zonmpSdiBuZSl650YR8iORVQMdO8DvfCqNKXFB"}]}},"0.0.2":{"name":"project-router","version":"0.0.2","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","_id":"project-router@0.0.2","_shasum":"985a483b7ea6888ad5eb7c6f852587a8f2bfba18","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"985a483b7ea6888ad5eb7c6f852587a8f2bfba18","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.0.2.tgz","integrity":"sha512-zdjMm6V/vt4SvsHlZoosi6vvbOpf9HHb14i5eO79dExKPKzvY/D59xhP1nk6B2us0yfcJLRECTKRpYWfUwk+GQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQocYRPu3p70WqeivXWynICFOQPNSDjPQjfo1pDY5zNwIgX4cvERkb8id41qk+TVGN+KnaO/nO7feQ6i/YNeVhky8="}]}},"0.0.3":{"name":"project-router","version":"0.0.3","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","_id":"project-router@0.0.3","_shasum":"5b731a0f882dd9868c4e55b9d1dfc533dd8f55e0","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"5b731a0f882dd9868c4e55b9d1dfc533dd8f55e0","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.0.3.tgz","integrity":"sha512-BMECNguuP9llmUKOU560PRRFgwtBWciyyxPUMFbPffVkCiwKaknD++HQjczpvFBhlTQCCO5/9RmQWPZ6iY23aA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgDUyrKbnvQtPfuTrko6IxulEizfIMJ60T8zftLfDcBAiEAtN3LviXgkZwaFQ2iZu6rLk4rbEgZtb2/VVPx2T58sq0="}]}},"0.0.4":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.0.4","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.0.4","_shasum":"3174cbdd930def4ac29ead16931b1190d77062f5","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"3174cbdd930def4ac29ead16931b1190d77062f5","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.0.4.tgz","integrity":"sha512-zlu9CJGoRIzTViqybnQVGHWZ+zQbF44/BVMMMrxGpY1KTTzea0X8D9SYfQvaDb4B1Hnfdvngu0BKV/WkC9y9EA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDccyU1SHxSq1cCrT4A0rPSyaGeITFMq65u6Zfzj9iRLAIhALk+0bukkcfvqZqqB4DzfPIy6uQkR3fGLEBNGWiycUy6"}]}},"0.0.5":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.0.5","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.0.5","_shasum":"5587fd8bcf63009786eb18f1c107cfca91b9025f","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"5587fd8bcf63009786eb18f1c107cfca91b9025f","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.0.5.tgz","integrity":"sha512-POtZH2bmRxQk8QZKh4h5WsisiGq/KR+M8enQWxMISnhF+Q3EgGmfGWI63TT7irt3VY+0l37BkTFQMNeEVcp79A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBbZqaUSJIqnAyn8DEQqbgGRncxQm+3KWQdVG7+NmlYGAiByQR/YFRqdYOl6rNpHwr85mKtETBgKZrZI3FOCle3Vrw=="}]}},"0.0.6":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.0.6","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.0.6","_shasum":"f2d9b11eed4900b34e05e83b41137f1c5f85dac0","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"f2d9b11eed4900b34e05e83b41137f1c5f85dac0","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.0.6.tgz","integrity":"sha512-ijNadXGFsCbZBn90Q+fwkesieIyOjnV5bziBnm2eAQeHEMAN9JrtVEp60VNT5uVfVpEXef/nBo+kKx3sWA960Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFjLQ3oikAb2I/oUWFIllM3cOk7FBDx2WB5j7KfzYZXLAiEA2M4zE5dvMeSN+8UMXpsDKaN0GLs+mN+OkpECGQTnbto="}]}},"0.0.7":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.0.7","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.0.7","_shasum":"f86274d5bffeae04b340539f4942fdfca256bdad","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"f86274d5bffeae04b340539f4942fdfca256bdad","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.0.7.tgz","integrity":"sha512-VhCnfF1M/1osPcXldHX7UH3M/9f63KGMhv8hi6l8icN7UqVy5mIqOA0qooZUvwOzAMMsX6mJ1vzu1pNsVG0kIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC3Ztuk8a2JkJBO/oKF0hCYRzNaRYy2XN4/QPo3w44wKAiBRwR3rEfvSEiq425fFkaLY+ag603GJghI5riNtcB0mUw=="}]}},"0.0.8":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.0.8","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.0.8","_shasum":"d8814d8a7b0a4b6569fd9ad9892ad59d22e34936","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"d8814d8a7b0a4b6569fd9ad9892ad59d22e34936","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.0.8.tgz","integrity":"sha512-xZ8HYPBNQ0Db1cOeKYdmi7UmasmRHDdY8qzbQsR4pQEeyvKE3V3hQBZUfwuJbSnYf7wZaLGE/ShPsWXf9zybdw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG9hGwGs0adkMV3Zwgb0/ezWE0Dy4wMJxdSTvhNF/m6hAiEA89F6uCXje+iycHDtFrgCaOCUjqheUO8WPcqbvkn94eM="}]}},"0.0.9":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.0.9","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.0.9","_shasum":"91bfa26d9e57e1b2ea6b59fc8200aa8250407fae","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"91bfa26d9e57e1b2ea6b59fc8200aa8250407fae","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.0.9.tgz","integrity":"sha512-vLbMu/oMKHZvJ2HqyTmjE/PYXDiYT7SzC1h9UXVz34GrCJb9xsu1TkEGq79fYUlOw3NqJ1+8D1He5BIzCitPsg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHjeaDMrDSzEvMN2Mi02VMAFREeaNUJAKsbXdAqB3BVcAiAzbFq9BLydLVtAVoPC1V6oZoiHbVMoNDATa4fuFYSvSA=="}]}},"0.1.0":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.1.0","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.1.0","_shasum":"7c7df17de9234d6fda550aced37a9f73c5ec1b05","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"7c7df17de9234d6fda550aced37a9f73c5ec1b05","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.1.0.tgz","integrity":"sha512-gWZQ6Qz8Wpk4pv5HulL1XP3xPcX5dNLK1ssBsPLdKGDVvtkp4TF5xilt+EFK/UeocZlpLVkgf8KWjwTakNeijQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWA6n7n1JXpPcpA0psk6TvooDfhI6uUQcVwOy9QrezeAIhAPXboJwowq+GE/qdHefjX/Mgvo2jbiyPW4rdxEVEoKVp"}]}},"0.1.1":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.1.1","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.1.1","_shasum":"19b5ac03ccf5286ae709cd7ca12cb433401e03e7","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"19b5ac03ccf5286ae709cd7ca12cb433401e03e7","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.1.1.tgz","integrity":"sha512-cxrSqF2CIIoSm/6hoUk8oHeiBakN3DFt95ZFbNPvuoIjoSRxqJz4520sbvYCiLOxNp05S6/n2Om8dE5xVXTqNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWzncsZJFeW2/1vGanOwlAXgCRqrsU4Njy7jpz/xIpYgIgAWzUV+JUb8wt1gYnWIFW07GiJQNlDc1GpdePuxiJ5kc="}]}},"0.1.2":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.1.2","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.1.2","_shasum":"17e47a3d5dabff48a6e7addadd2ca39641558a1b","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"17e47a3d5dabff48a6e7addadd2ca39641558a1b","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.1.2.tgz","integrity":"sha512-7/A9Eiq1mZhkUUG02/3141jWfxgxjuFvgDgH9rVahcyyTmI5+tfsqgZiyfnyxNmdTAAMuheT7XZkf60yf4JyPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLRcZTXdKEKn2wk6+Fs+78PRCcbxmkrEnI5LLjX06ndQIgNwxVWzC58wG+Y8LwMQmC1roT2xW6eWILrcN8p1NeWCY="}]}},"0.1.3":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.1.3","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.1.3","_shasum":"e2466877e057f2ebc5578d69787597a3b99002c9","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"e2466877e057f2ebc5578d69787597a3b99002c9","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.1.3.tgz","integrity":"sha512-cDe1cZqdy3Ze3R42ceOLxDmqH91RfWnyQoNqD6sca159fO6DMdKMzydQA9Sr6iyiW5PyvhMXSYivI5Bh+3OOyg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICfnmYBBjbAIVC51+3erDALOysNEJSF9GgsA4naRUc6rAiEAxpfjDSiIUuoYcdlsul7iYL3OEU92yMc0F1BMKtppQAY="}]}},"0.1.4":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.1.4","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"rsvp":"^3.0.6","lingo":"0.0.5"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","gitHead":"5a7e3407782c9c3a377a05455c0a7ccaec450777","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.1.4","_shasum":"6d1ee2c7793ad6fbd042502c27ac508bfc10e486","_from":".","_npmVersion":"1.4.13","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"6d1ee2c7793ad6fbd042502c27ac508bfc10e486","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.1.4.tgz","integrity":"sha512-MxNL8UGpvGTlSZH8YX3TNN9obsAhSfyrIg36rcwT8gbZf4zz9ihY6GJ0T6ECgsEaottme2VXVXyf90Slv9gm+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID/qasrWLNuLGSe+w13U/SKDwS1vVRJ4UoGF7N17iXFIAiEAvgXbQfMuDEtsIorvtMu7Mwt0s810kuQARMSgx/WumDM="}]}},"0.1.5":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.1.5","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"i":"^0.3.2","rsvp":"^3.0.6"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","gitHead":"c7d18dc0de93ec1ad7a755ba0e9074604beffd6f","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.1.5","_shasum":"5843af982616a91c1d2ad28ec14898bbdcba21f9","_from":".","_npmVersion":"1.4.13","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"5843af982616a91c1d2ad28ec14898bbdcba21f9","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.1.5.tgz","integrity":"sha512-LsDzKEw1O3miGaY7bWt9vrB2hE28n4PWO5uGilj2ZrYo7ny2srz9LSzyWijRUixLF29Hg4l8K8cS0pKl6msXaQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzxv1xx/zOzhwPZIZACgCUE5x1CNLTWULwLezwK9D+kwIhAIvmkdOArM8avgAPmvwwm2HjcTNVaJvB6O+z4ml7Gap3"}]}},"0.1.6":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.1.6","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"i":"^0.3.2","class-extend":"^0.1.1","rsvp":"^3.0.6"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","express":"^4.3.2","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","gitHead":"0d1617d1331a6760e394ba08a2f46f688bd2967c","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.1.6","_shasum":"d5bcaa8dcbd4ff3158f9b220e19bb93a18eafb53","_from":".","_npmVersion":"1.4.13","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"d5bcaa8dcbd4ff3158f9b220e19bb93a18eafb53","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.1.6.tgz","integrity":"sha512-EcwZhLu3V4X00uvlRVyhO068BxaJZTqQTzNPoxX73ygmkXXkwuFUiJGunWYQefu8Te0g3HfyMLY7BPGKGRnefw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChcft8AGdwGtJhCahrvxzFk6d2AoSKzSwGRmxm6SB54gIgHKeCF1Qhz4ovj5LrLAfsj33OLaGnf6zyhF3G5brFLWs="}]}},"0.1.7":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.1.7","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"i":"^0.3.2","class-extend":"^0.1.1","rsvp":"^3.0.6"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","express":"^4.3.2","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","gitHead":"aa9abf0c2209d89fa06d48f1a23a337f4916285c","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.1.7","_shasum":"10998e35319d3680c26d4981d696f610625ca3b7","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"10998e35319d3680c26d4981d696f610625ca3b7","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.1.7.tgz","integrity":"sha512-QiUZR32XGTYi//Izx1tt35ROTkYrbICwdK0HHrb/hoGAK0hYzJF6d8vJj/rnPGtXA96e+lZfbc09eR2JOI8a6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICKvXKjP7g0nbl1nL2/snwB7m5B9XCAuqT3J0UNTX6+RAiBQhVU8K/HpPBtjo0BNDwF4AdSObtzbk8+X7QNLnxz3iQ=="}]}},"0.1.8":{"name":"project-router","description":"Promise based routing for Express apps","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"version":"0.1.8","scripts":{"test":"mocha"},"peerDependencies":{"express":"4.x"},"dependencies":{"i":"^0.3.2","class-extend":"^0.1.1","rsvp":"^3.0.6"},"devDependencies":{"chai":"^1.9.1","ejs":"^1.0.0","express":"^4.3.2","mocha":"^1.18.2","sinon":"^1.9.1","supertest":"^0.10.0","underscore":"^1.6.0"},"engines":{"node":"0.10.x"},"author":{"name":"Moudy"},"license":"MIT","gitHead":"7d3c86bb4b869ae1009ff639cbf6be0e9dd5b415","bugs":{"url":"https://github.com/moudy/project-router/issues"},"homepage":"https://github.com/moudy/project-router","_id":"project-router@0.1.8","_shasum":"40da80d799177eec431ed466b09498ff27ee7b1c","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"moudy","email":"moudy.elkammash@gmail.com"},"maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"dist":{"shasum":"40da80d799177eec431ed466b09498ff27ee7b1c","tarball":"https://registry.npmjs.org/project-router/-/project-router-0.1.8.tgz","integrity":"sha512-oxKw3nKbDYwAC6ruvZn9ZrEUKRpgFKi7UOEDw0kyf5U3/TNaDqPqy0I7ziMhsiL2X96TfDe1uG7Oi2VOL7+SZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpRvNQMxO9iuWxQgpzIJpucyCPUWbk/vJ537ZUsq+migIgaINwfsRCouvvdhIG3g9Mfn5b1+yYhPmm5kGmDtrpSvA="}]}}},"readme":"## Project Router\n\n[![Build Status](https://travis-ci.org/moudy/project-router.svg)](https://travis-ci.org/moudy/project-router)\n\nPromise based routing for Express apps. There are 2 parts to this library.\n\n1. [A promises aware `Route` object you can extend](#extending-the-route-object)\n2. [A map function to connect routes and resources to `Route` objects](#defining-routes)\n\n### Motivation\nMost request/response cycles of web apps follow the same pattern\n\n- run some code based on a URL\n- potentially reject or redirect based on authorization/authentication\n- create, read, update, delete data (aka CRUD)\n- present data back to the client\n\nI wanted to abstract the logic of mapping paths to files and have ways to hook into the request/response lifecycle as needed. Instead of having controller objects that manage a group of URLs I found it clearer (and easier to test) to have one object per URL (i.e. `UsersShowRoute`). If no route object exists it will render the corresponding view. If one does exists it will process the request by stepping through the [lifecycle hooks](#basic-lifecycle-hooks). This lets you add logic to just one part of the request/response process.\n\n### Install\n```\nnpm install --save project-router\n```\n\n### Basic Example\n\napp.js\n\n```js\nvar app = require('express')();\nvar projectRouter = require('project-router');\n\n// Map paths to route objects\n// returns an instance of `express.Router()`\nvar router = projectRouter.map(function () {\n  this.get('/', 'pages/index');\n});\n\napp.use(router);\n```\n\napp/routes/pages/index.js\n\n```js\nvar Route = require('project-router').Route;\n\n// Extend from the base `Route` object\nvar PagesIndexRoute = Route.extend({\n  // Define a model hook (this can return a value directly or a promise)\n  model: function () { return User.findOne().exec(); }\n});\n\nmodule.exports = PagesIndexRoute;\n```\n\napp/views/pages/index.hbs  \n```html\n<p>\n  The data return (or resolved) from the model hook is now available in the view.\n  {{username}}\n</p>\n```\n\n### Seeing the routes\nUse [Project Router Viewer](https://github.com/moudy/project-router-viewer) to see a list of routes.\n\n![Project Router Viewer Screenshot](https://raw.githubusercontent.com/moudy/project-router-viewer/screenshot/screenshot.png)\n\n### Extending the Route object\nRoute objects are what handle incoming requests. There are a few request/response lifecycle hooks you can define. This pattern was heavily inspired by the [Ember Router](http://emberjs.com/guides/routing/asynchronous-routing/).\n\n#### Basic lifecycle hooks\nThe following are the most useful lifecycle hooks listing in the order they are called. `beforeModel`, `model`, and `afterModel` can optionally return promises. These promises will be resolved before calling the next lifecycle method.\n\n`.enter()`  \nThe first method that gets called. This is your chance to do somehting synchronous (i.e. reject the request based on data already available).\n\n`.beforeModel()`  \nIf you return a promise from this method it will be resolved before the `model` hook gets called. Useful if you have data you need to load asynchronously before getting the model'.\n\n`.model()`  \nShould return the data for the route or a promise that resolves to the data.\n\n`.afterModel(resolvedModel)`  \nGet passed the result of `model`. Use this for any logic that depends on having the data (like authorization that can only be determined with the object). This can also return a promise.\n\n`.responseData(resolvedModel)`  \nAlso gets passed the result of `model`. This just returns `resolvedModel` but can be used to transform the repsonse data (serializing, presenting, etc.)\n\n`.error(reason)`  \nCatches any promise errors. Calls `this.reject(reason)` by default.\n\n#### Methods\n`.reject([code,] error)`  \nEnds request with error. Status code defaults to 400\n\n`.redirect()`  \nDelegates to Express response `redirect` method\n\n`.param()`  \nDelegates to Express response `param` method\n\n`.html(data)`  \nRenders `this.templatePath` with `data` as context\n\n`.json(data)`  \nSends json response as `data`\n\n`.params()`  \nReturns `this.request.params`\n\n`.body()`  \nReturns `this.request.body`\n\n`.query()`  \nReturns `this.request.query`\n\n\n#### Properties available on route instance\n\n`this.request`  \nThe Express request object\n\n`this.response`  \nThe Express response object\n\n`this.path`  \nThe path defined in router (i.e. '/users/:id')\n\n`this.templatePath`  \nThe view the route will render. Matches the route filepath by default. `this.get('/users, users/index')` will render `app/views/users/index.hbs`. You can define this property to change what template will be rendered (i.e. `UsersIndexRoute.prototype.templatePath = 'pages/index;`)\n\n`this.resource`  \nThe resource object (if defined). `this.resource('users', {resource: UserModel})` would be `UserModel`. This can be defined on the router definition in the options hash or on the Route object (i.e. `UsersIndexRoute.prototype.resource = UserModel`).\n\n`this.resourceName`  \nThe name of the resource (if defined). `this.resource('users')` would be `users`.\n\n#### Example Route\n\n```js\n\nvar Route = require('project-router').Route;\n\nmodule.exports = Route.extend({\n\n  // Authorize request\n  enter: function () {\n    if (!this.request.isAdmin()) this.reject(401, 'Unauthorized');\n  },\n\n  // Some special async admin authorization\n  beforeModel: function () {\n    return new RSVP.Promise(function(resolve, reject) {\n      AdminAuth.canAccess('users', function (canAccess) {\n        canAccess ? resolve() : reject ();\n      });\n    });\n  },\n\n  // Get list of users (assuming this.resource is mongoose model)\n  model: function () {\n    return this.resource.findById(this.param('id')).exec();\n  },\n\n  // 404 if model wasn't found\n  afterModel: function (model) {\n    if (!model) this.reject(404, 'Not found');\n  },\n\n  // Namespace response\n  responseData: function (model) {\n    return { user: model.toJSON() };\n  }\n\n});\n\n```\n\n### Defining routes\nDefine routes by providing a map function to `projectRouter.map(fn)`.\n\n#### this.VERB(path, routeFile)\nMaps `get`, `post`, `put`, or `delete` to a route file.\n\n```js\nprojectRouter.map(function () {\n  // Looks for `Route` object at 'app/routes/users/show.js'\n  // and renders 'app/views/users/show.hbs'\n  this.get('users/:id', 'users/show');\n\n  // If no route is found at 'app/routes/pages/about' it will\n  // create one and render 'app/views/pages/about.hbs'\n  // Can be useful when there is no data that needs to be loaded\n  this.get('pages/about', 'pages/about');\n});\n```\n\n#### this.resource(name, [options], [fn])\nCreates routes for a resource\n```js\nprojectRouter.map(function () {\n  // Equivalent to\n  //  this.get('/users', 'users/index');\n  //  this.get('/users/:id', 'users/show');\n  //  this.get('/users/new', 'users/new');\n  //  this.get('/users/:id/edit', 'users/edit');\n  //  this.post('/users', 'users/create');\n  //  this.put('/users/:id', 'users/update');\n  //  this.delete('/users/:id', 'users/destroy');\n  this.resource('users')\n\n  // Control what routes are created with `only` or `except` options\n  this.resource('users', {only: ['index', 'show']);\n  this.resource('users', {except: ['desdtroy']);\n\n  // Nest a resource by passing a function as the last argument\n  // Will create paths in this format:\n  //   '/users/:userId/posts/:postId/comments/:id'\n  // And look for route file or view at\n  //  'app/routes/users/posts/comments/show.js'\n  //  'app/views/users/posts/comments/show.hbs'\n  this.resource('users', function () {\n    this.resource('posts', function () {\n      this.resource('comments');\n    });\n  });\n\n  // Use member and collection to add more actions to a resource\n  // The following creates:\n  //   '/users/:id/login'\n  //   '/users/active'\n  this.resource('users', function () {\n    this.member.post('/login');\n    this.collection.get('/active');\n  });\n\n});\n```\n\n#### this.namespace(name, fn)\nCreates a namespaced scope for routes\n\n```js\nprojectRouter.map(function () {\n  // Equivalent to\n  // this.get('/api/users', 'api/users/index');\n  // this.get('/api/posts', 'api/posts/index');\n  this.namespace('api', function () {\n    this.get('/users', 'users/index');\n    this.resource('posts', {only: ['index']});\n  });\n});\n```\n\n","maintainers":[{"name":"moudy","email":"moudy.elkammash@gmail.com"}],"time":{"modified":"2022-06-24T17:55:48.642Z","created":"2014-05-08T12:47:02.976Z","0.0.1":"2014-05-08T12:47:02.977Z","0.0.2":"2014-05-09T12:11:05.560Z","0.0.3":"2014-05-09T12:22:28.079Z","0.0.4":"2014-05-09T18:01:32.057Z","0.0.5":"2014-05-10T11:43:16.532Z","0.0.6":"2014-05-10T13:48:06.627Z","0.0.7":"2014-05-10T14:27:38.169Z","0.0.8":"2014-05-12T23:38:56.340Z","0.0.9":"2014-05-13T19:22:59.988Z","0.1.0":"2014-05-14T20:23:05.637Z","0.1.1":"2014-05-14T20:44:28.693Z","0.1.2":"2014-05-16T18:37:20.644Z","0.1.3":"2014-05-18T19:16:32.057Z","0.1.4":"2014-05-28T12:42:40.724Z","0.1.5":"2014-05-29T15:50:08.002Z","0.1.6":"2014-05-30T18:23:40.559Z","0.1.7":"2014-06-18T12:25:20.625Z","0.1.8":"2014-09-29T12:28:51.877Z"},"author":{"name":"Moudy"},"license":"MIT","readmeFilename":"README.md","description":"Promise based routing for Express apps","homepage":"https://github.com/moudy/project-router","repository":{"type":"git","url":"git@github.com:moudy/project-router.git"},"bugs":{"url":"https://github.com/moudy/project-router/issues"}}