{"_id":"molen","_rev":"48-8996dc18af64d29c6d11d7d58744f07e","name":"molen","dist-tags":{"next":"0.1.3-master-04e7c48136c40ca48b93a0722cbc0992ef312987","latest":"0.1.3","4-experiment-with-a-convenience-serialisation-method":"0.1.0-4-experiment-with-a-convenience-serialisation-method-7cc56163dd472067bd585d477c0c74ee92d58393"},"versions":{"0.1.0-d85e6a1efad6d1ebb564b5e5909520f8522aa8a9":{"name":"molen","version":"0.1.0-d85e6a1efad6d1ebb564b5e5909520f8522aa8a9","description":"Functional reactive web application framework","main":"dist/index.js","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"license":"MIT","dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"d85e6a1efad6d1ebb564b5e5909520f8522aa8a9","_id":"molen@0.1.0-d85e6a1efad6d1ebb564b5e5909520f8522aa8a9","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-AzWnn2IQx2eXGOPyqXTQNGflo3Motr1eqf9K1/TNn6b3DvB0VrzMSYLbrAZ4PHJB4ZfGsdTFs9WyS7uaSLsdjw==","shasum":"322ddc9511b64111dc2ed3ab00497cb30b668fdc","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-d85e6a1efad6d1ebb564b5e5909520f8522aa8a9.tgz","fileCount":20,"unpackedSize":114730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhSlsCRA9TVsSAnZWagAAr00P/juCtbI+adXSJos14WW0\n7SLXbmAiTCHoRBN5uiM2Ftlie4OAy5auYOCrp7BPyxWBUgGbrkm8jx1chFCX\nELEw/0P88QmfsT3WYUPZbc29s4Z+ZKVIqUKYqrj20iZ19BGSTFfG5pOsUqST\n+ojevaunLP7NIBomPq5BqtrrljF4SFZRV51gLIYAVvIcBXJkS5jaZLhAGFPV\njeWtXyZbYJMwgy7RVfW02c7c2qxlfR5hiM3PM0J2fX7l9OQhgcd/iWVLUHjO\nxy2MdAZBBq+mKFmsy7lJDl4TH9a8a1txbEJMl2L1rPlQplxVz8pcj0tRhhPU\nRzCVEmB3G1kQ9EJGK3oplcDlUw2XDzdirCVV4V+I1xBhGy9sTd6JhcoRdyXt\n4Ug5olR76QJfEL2qGhu7gA2xFiQczXiYCtcSqsSzlu+W8UWNsTYuzd9/Dhpx\nnshj+cKlRWvfh9ykjsE/1EJ7Om6PeKikObRc6OpWuML2dMyb7eRH1xePfIh4\nj+dcj3zSnFoUDSCilA/oKXT/3lpuRzt4MdRpkdqCBIZrHMqSfmJxiMoI4RWD\nwE9oYrmFXZ0fnd3reuBhWIm5GOLYgcRz3vKpSnsHKODPZ7v8F0vl7BzqQm1t\ndzDTDX0bTEY5NMfEJ2kW+4xuw/ow4276HzSnIqRMdHTvsDe/CXBiTXbNKHS7\nIVRy\r\n=Zu0K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICi1X2cSTBGsM7u137N+YpP8ZGlCGqkuAaAw+QLNR7GtAiEAgeXQUKthuqaf02Ncy+xLyiEbYPq+jZ1b5iCSpJzekc8="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-d85e6a1efad6d1ebb564b5e5909520f8522aa8a9_1535453541955_0.45968236590649436"},"_hasShrinkwrap":false},"0.1.0-3a33bf955f68574fc8263d723b859b6247c254df":{"name":"molen","version":"0.1.0-3a33bf955f68574fc8263d723b859b6247c254df","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"license":"MIT","dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"3a33bf955f68574fc8263d723b859b6247c254df","readme":"ERROR: No README data found!","_id":"molen@0.1.0-3a33bf955f68574fc8263d723b859b6247c254df","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-odltdre8xK1JQs7TT7ukZgAaC3zYFybJgOgcEyXcm77uZ59u6SN7BxBFnsWJ9RxE4GDz6Z6qkidsHHmJ6935iw==","shasum":"4cb2f99c81a491d72fc8b0cc561bc305a7304c4f","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-3a33bf955f68574fc8263d723b859b6247c254df.tgz","fileCount":20,"unpackedSize":114840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhS9NCRA9TVsSAnZWagAAolIP/0kpVizrHrD1bqgiQPbu\nLQsP9ScEBw9cDYevoxu4IWOhSScXN6vTJLKTh02iJ08zeiLYgUYp9d0WfxsK\nVWFsyMoRwcDLaHJ47mG6EAon5RZTy8RudFgcNpQKTfgKZL4tw9yXjk1ZAZU8\n7f/iKxjbD/4Bf4cTzex1sW8nycHwvOuk3OFkrZ7urUcGySW2HMgL+TzgIIxR\npIBBNGbu7hTfcqm9z3OjcScrVBgnkxPwk/JnDkcr6te7kLf3b0u5IslbTGu/\nLZZBJa5FG7GXaIAJZ+ATmWhTIBMls0QI7Hv6BznCh3L/EZOu+oVPmmgOM8kZ\n4LQoShakVyl6+M10xsgLwKyoJ2MWpPk52XksLa/EuMjy1nsXVe6j+ZYvaCs4\nXTjtZlSGiG+LiKk4UOY4Zi7r8+RRYZkuLJX5iM/Juo+R8WAkMbzx/QXxmLfC\n8V1ztr+dZj8T+Cg9T/qL6kFOdvLQvSQaNwJK6aoDo4LWE4YtmR5ckjLb2ok1\nsEEWZe8qsncvyoQTDW7swlR7xKeGOxkpCQFBJ3ci+QX6CTgRTcyzP3sC8Tkr\nHzCYDVDjgQaqWckiTNigk2tNvLLK90FkY2nVvs7ci441GUTZSvWoNyC47AGH\nENcblmC/1bf90Fjru1ZHxuB/Nwa1CKt1s/EJpJrVvNxoFOv7BMmf5OW73J+d\nUX7+\r\n=d43H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICtbKpz57NMqOSK5ZxO+9v+epk/oARMVdesRCx4NqRspAiEAs8LJcedtGa/9UOtfUbCxse1qr1XYA/7DEauhLNwOy/s="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-3a33bf955f68574fc8263d723b859b6247c254df_1535455053063_0.3578610514690199"},"_hasShrinkwrap":false},"0.1.0-2891f698a4b3e5220682fd060bbf81a38beb2f2b":{"name":"molen","version":"0.1.0-2891f698a4b3e5220682fd060bbf81a38beb2f2b","description":"Functional reactive web application framework","scripts":{"prepublishOnly":"tsc"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"license":"MIT","dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"2891f698a4b3e5220682fd060bbf81a38beb2f2b","readme":"ERROR: No README data found!","_id":"molen@0.1.0-2891f698a4b3e5220682fd060bbf81a38beb2f2b","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-4KLw05NyoOP6s1BLWhAzQMe4FVyvRCwon+MKs3G500324vEaI6905so8yUABoo1OvHPzz1BSW6nbyTx+hC6A/w==","shasum":"19b078dd640a16c563ac3477c1a56bbc02d88272","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-2891f698a4b3e5220682fd060bbf81a38beb2f2b.tgz","fileCount":20,"unpackedSize":114809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhTN9CRA9TVsSAnZWagAAGNoQAIqTboMYljZQef4SvojP\n2GkDwOczV0ioyetlJyvJRq0lxE0HIkbv6VdCWs7Koek2HrZnH29UbLbi3Lqh\nJz/2yz3LfVeJcPvNI/JqCppe+gyP/Uqgtd59gvBv6COaNX/C7WQ15+gdv1Tu\nEGuqaBF92CFbGNLBBaF7aVQqXoJXFvhRHupFG1az1Wev8JLFd65tG3coMwwQ\nAT/0VWvL1JPDhRGV53YNC/IAMbkYpQfDRGAsvhhQB8s7mZ2QR+n8KUCr4Fif\nTrsXP7cePg3N/1fZMAoSm7PWOjD7JI81borTdyFbMY1fB4e2yv089fxLkNzZ\ne8n/EeX+ZjNMpNhiCb4srEWwVeSyXCUg/havW/B0pA3ubViRIqAXO7vgfJ/3\na14BmBIBKJkbcTHqP58w8qFhyxOTMBxz4a+iP1ag62n6gIIDHEqoiKlM+v0s\nT4EVgLQ6kXkOEKHoiOEWb7FIahuXlwRIiD2xcSiFIkIsTVCdbWWn0f0MHBhU\n90h/eU+SC5xQJ1tRIpnm4fxTuPoXd9F2uJGNKQHVx4ctD0vznVlK1dSfKsFv\n8mFVnw63zzn37KIjeLCMnjQzfWnYZTSXSDdaWn3BbToA9ONKXBi5vnrlz/o0\nQIja06y5I4+2oyWGlR75LT+pWL8AHMIEp0iXjyPVZ1T+c5HkawqDbTiFGs88\nktLh\r\n=o6ey\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHKZu13Gw9A+6AN3cZoYu3oFuJuD7Koa7Kge9uAzXjFrAiB+/NMZuVPi0Cwa5Su/RBMtknAso2UaKbWrn7dsHwQ6/g=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-2891f698a4b3e5220682fd060bbf81a38beb2f2b_1535456124952_0.46725887032071567"},"_hasShrinkwrap":false},"0.1.0-024029d0a77e5dfe49bce12c5802b65509b4b170":{"name":"molen","version":"0.1.0-024029d0a77e5dfe49bce12c5802b65509b4b170","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"license":"MIT","dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"024029d0a77e5dfe49bce12c5802b65509b4b170","readme":"ERROR: No README data found!","_id":"molen@0.1.0-024029d0a77e5dfe49bce12c5802b65509b4b170","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-/NP10Q/ddtwZCKhGxsF2yYjabUD0M6cq0ejMZTVn51AtFQnmMCiUdUie7S0Il3bd1dN0NFmzmWJQNL8Kd4KnuQ==","shasum":"4c67058a46a9a40589d945422b57d63d09f1eaa9","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-024029d0a77e5dfe49bce12c5802b65509b4b170.tgz","fileCount":26,"unpackedSize":126853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhTcdCRA9TVsSAnZWagAAhe4P/RQmInzq2VMdMz3d5BNs\nIJgHVYongj+HhF46k7BbO/6gow+vZLYIM15Wo2oOeVG+P8r07m3JS39HJPfz\n2D9/i4VBOthEHT7P+V8AhPz10WQBeGBLovWXD4WBMcrHAFraXsbl1uLZFR8S\ndIAIAuN7fSf6t0TXWoGK1LIdkw64qVIccAYE3BUrjmabANh9wIFFTdpBKXk4\neKtBkS7F3IoRMUz9Yju7E0zvvGvgq9bFYpXVKJc51278OliAfYqK3BNtKdh1\ntLB3OZOvljLf7nqtERRbnXdjXVJ7dR2pFUZBEVCyej7mdpDfxx/T7NG2qpul\njb4rYRJnrTgxMaKMVKa4kXeWdHgzg3mwy6PBAlWqIisP3C9XfKwIvRjNvDnT\nfKrU0/H2DPCz03vTyGk+5S1D5dGqhY/1GLT4mJ7OjR3horjy7iy06VHO0B0y\nPR8kASxcPQ9fyyApueJFPrbe6MvLcpKWmu7u6gVbFBx+O2FY6V9/AjrAoE5q\n9cjfTiC/oiOhv8paZjsKlPGHT9DWrBLolBSS2XbhvXiyLgES1qISfF3j4e66\neyydfDSJ7TM5+1vqrOPbPEB08gWVr7AEZmnIeaWZKmPZQutmp1i8HFeeV60X\nZyhftjfMGSyl44vHSa5qjxGMOyYIp7Sp5W30sVspe71TOsezvXVnNud5q1iL\nnDs3\r\n=FXRd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDreOZ0FpQwZdlpVbYSuDajzPUbCxf15rE7pGupC4SJdgIhAPuwoYXrcvnZkoicBpp1CgCJDTwi4ClS3TJglKlrzZBf"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-024029d0a77e5dfe49bce12c5802b65509b4b170_1535457053001_0.47067298359128307"},"_hasShrinkwrap":false},"0.1.0-c2f5ee36823af846b82c92b1c49c80d88fdc88bd":{"name":"molen","version":"0.1.0-c2f5ee36823af846b82c92b1c49c80d88fdc88bd","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"license":"MIT","dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"c2f5ee36823af846b82c92b1c49c80d88fdc88bd","readme":"ERROR: No README data found!","_id":"molen@0.1.0-c2f5ee36823af846b82c92b1c49c80d88fdc88bd","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-GpJy4aPAjuxaHuTPwuVcTLQJzl1df3p8Eer6dEy2pOZjs53fIjRTbDWWG1DcNh6J1w4wwnrqsN5io6qiG7j7aQ==","shasum":"034d3cf4906700811b4d6c05001f4e454467b176","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-c2f5ee36823af846b82c92b1c49c80d88fdc88bd.tgz","fileCount":32,"unpackedSize":129678,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhT5LCRA9TVsSAnZWagAAsIQP/RQHi3grsnvXEmOQi5ol\nP/Lqs3MvUittOsUh2VRFy1HU+zNLLusOVm3YI7j4pN3MA/UrQSiapYM4LMEw\nRFyj3frcXNAQ/q9sDNG+kXRJaabZ6oqyDel2lg0IM92Rg2Pt8eqW3R+KclUz\ndpJfZIkaiTWfMkrC3MQSvXCMC5eL2gFFEdY5dzyzNPCB+v84cmjy/zIWUL01\nXQka4kHEYgMT0Qe2Lsdq9C15T8CMr4gKSKWMTyDa9e481Ou86WR1yklnkB+2\ncT4ijUHr+FB4WeX/IcIO2QStD4drXT1zLRLDRxIIWgOFq0P+fhETRwpLZPX9\nAkUM3WUiJ1qU+xrfMly03HotVO0pVvmXTmiHtoWqEUwRBjDsVvGXxgMd/ike\nFbra/0SHWD/8VSCJ6SOhi3HvS5olzPN7oinxOAuYTD26wKaZHw1BxLpHuasO\nQhDNOzNc+kEAxnslhnU3BxlQHubV/dTSuTjfuttn/htmWN3vE0LqbvkQ4HUq\nUonr06jofCJIFuboIaX42gEYbIQvyelNUeOlj887Xbs5l3QvVYZBA/W1tZ5x\nySNnUkCK+yWwuHsfysT4o7QzDHU8ylJf8kRN2CFQ4PQCtgGQWWdEc3YaVUOb\nT0U2ya1Gip+Pav9n9iCasDsUarWCVBLHYr5mXg4dIhrr3fy85Ypf5C/2ucet\n/w8x\r\n=jmLW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDx1on3rAf4JLFq96DESqezGD37WyLpf13sxoJfoereQgIhAKOKz9SVLiXnrOA+N5I3OXM6HXsuzD7fV91CHXHqGU9n"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-c2f5ee36823af846b82c92b1c49c80d88fdc88bd_1535458891047_0.32905118623950846"},"_hasShrinkwrap":false},"0.1.0-ee258891c7f36d36a1f6cc2b9eb35b89979a0ada":{"name":"molen","version":"0.1.0-ee258891c7f36d36a1f6cc2b9eb35b89979a0ada","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"license":"MIT","dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"ee258891c7f36d36a1f6cc2b9eb35b89979a0ada","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","_id":"molen@0.1.0-ee258891c7f36d36a1f6cc2b9eb35b89979a0ada","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-e61mOiwssT5lOApOazCIFXuhHdpJ3w8KbCtJP81niRNRM7kG54ELHd74GVuphOsTuqWIW+MoBYMoNi/OFcuUFQ==","shasum":"3135ae437e292966df9926517e5206b89fe60d94","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-ee258891c7f36d36a1f6cc2b9eb35b89979a0ada.tgz","fileCount":33,"unpackedSize":133702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhVnPCRA9TVsSAnZWagAAaikP/ifbDUlR2IlpzJ2SYBz2\nJxismlqA4cLN+t7JEIS6X8btUtcwxTTstF7M6iNLwFdk0qkzRiPqwp1jK8oD\nVdVub8+Ut291rvAyK8RXD51ctbSW7DtANHvcHiZsl+kQpPJyRd98FPMylE5/\n/6D2zkRmRSjLRCy5fx/d57f2CzyzmRdElzRbgh0Qn4nSNKCx7EAbblAW22SQ\nZIWH5pwePWGwBl+reO6+Tai4r6JAYYN7UzOdUxotufWi9drWxpBcs76E8EDf\nb1FN8Vidz+NCyErYoAwpFJFqSYr767gLy+Sq04YCBZ6zFT/EKG0Pk0r/qyAA\n+lNGdkcGhpjQc3Z+NEWZtZK0gzfEYPteH3jMdl00UkXdvH7+COW1C7BnsdpB\njIxtmY3P/8n8i8MN4hTgBoSCyJ4K3SHzpAbJu1+n5qPkaeh8mFkNXfZKRlor\nXayDY43W/Hz/zeBMeXmvDCVVJKve1rHzoNfeYD9GjP4qKMCBZoh7C2LOigPP\nlzUxExp7747vdF64WfMkLdFV/10P06vHnILgStqOB0PV+ZmZMPPAa03mYSai\nqwsccrAtKbvcnBVvFavlaeVzcIU1I4hFBAFvQQ2RUQJjMvUnzj/TZtVi0QUH\nmEeebtb3mJ+HtI3g9CMq1mhOjsIKqnsmuohJ0n/jht3SkNBvdTVwHUjAtmac\nAuCq\r\n=+Oju\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGTFH1HHE0NA92SXZ1K0UV9PbOLRkwieDF86vOitLwqFAiEAsc0y3EssrfAQoNlXmPXUbyMjVrK36d463HSJNzBnA4o="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-ee258891c7f36d36a1f6cc2b9eb35b89979a0ada_1535465934466_0.41968160342314254"},"_hasShrinkwrap":false},"0.1.0-bfcd537d0e2d6849c645bbb401372ea1f6e4ec2d":{"name":"molen","version":"0.1.0-bfcd537d0e2d6849c645bbb401372ea1f6e4ec2d","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"bfcd537d0e2d6849c645bbb401372ea1f6e4ec2d","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","_id":"molen@0.1.0-bfcd537d0e2d6849c645bbb401372ea1f6e4ec2d","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-nW0sYryYCr/B9ii7QnITtk+/bnV1zLhjeX4D/E5VlGhabACgTf7MkY+ds6vhOUS/5zVjWppG7AvP01225K5Jtw==","shasum":"bf435b3ec9744512c8ac4f6a5df318a29c8055c2","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-bfcd537d0e2d6849c645bbb401372ea1f6e4ec2d.tgz","fileCount":33,"unpackedSize":133908,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhVw5CRA9TVsSAnZWagAAkPIP/j7A8Q/2prRP+R0MjCbr\nW2OcwZso/2CrCjd7xtCzg7T0N37EFy1T94esKjG6O/t7oruL3IQ1JoCqJjRy\nPUqPsFTfeNUGCcpi/98faORM90X66K8TS5WZ9vVJfPs7hxTZdsnpOhF0E/am\ncZeZTbNU2OMEQMVXwl1WmPB5ugEcD05h5b6iAg2FOx5ou4XUzp2OWH8TPd+K\nufsyOrNajlXtooSwqZTmksLvWv+7D8EOamc79CPNFc5tAYDhsNHQO+dOuZJN\nAUXwUsDgA32QgV4fle1nc6OiPzKxIMwbLw9v7jb4rRfNdWL4KSrT/Nv0jdJ0\nL4y919ExS4Eyt35mH9X0Zh6zWgfhQtKL8fH9Ti4AYGyBGP9AyLQpInD0NgzV\nPUssQZLSwXVPgZW6nZhEcMor1UK1eo9Vw5IQj4nnN+D1qkweRVDAOdo99DhI\nXV655QGN3LjE+xlzW6VjEvwXVYPmg+HTX1WacsYpemA8X5+H5fM+bocO4W1O\nGcQESQATL9kjqcmfszRCbtKzDld5u+Z4UMfquay3j2Cp57OCpYJv2QA6b/Zu\nXLgJtgo1HKuoRHT3m00G4pJ+FyCP5N+UmiLJNVukfQa5pP2ehFMev+Ng8HSM\n6zaeKE/tpgenPuYi2Up5AQKSysl5w+LUNIoH5JJmtpY2khsQ7bi4T2Ld7TEr\n0ovX\r\n=H2Cm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHaN6te7x5pTvAWds9ORdainZAXM7WNidzpPEdc4lhiIAiBlUL7zvkPBsxWSecrhmix1JXrA4kCHtUDtBgMkK+EYlg=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-bfcd537d0e2d6849c645bbb401372ea1f6e4ec2d_1535466552819_0.8291079680205717"},"_hasShrinkwrap":false},"0.1.0-ddefceb29546858de1b26a22679a575de7b80623":{"name":"molen","version":"0.1.0-ddefceb29546858de1b26a22679a575de7b80623","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"ddefceb29546858de1b26a22679a575de7b80623","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-ddefceb29546858de1b26a22679a575de7b80623","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-JUR9aMZhZzWEn4k6rRzitjAZhaIaFhT0RafjNY0OhzIWZTpdSZth7HDWCqiMIqWXJHGphPkK1gKc/CZt6TFFhw==","shasum":"8ecd2912dfbef27993bf3cad321d25b490502084","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-ddefceb29546858de1b26a22679a575de7b80623.tgz","fileCount":33,"unpackedSize":134066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhV28CRA9TVsSAnZWagAA7J0P/3UWjEpZ9hlQ2HhVOr/g\n+MEWGIP6RzWjILTJb787LPFzNZz6+0nBSHskYJpGlPwSfIgZv1RD0slfIr5s\nTZ1xPR9E4cDlQL3JqgQduVZrNO/stdJ1BKkJUGaqAjjITgjqNBJ/2QYvUNrb\nzgt+568vHF+baULf0pkhv5X5mTAa4xRSkVTv3JStwQGwtZ7km6KlbJFpD2nb\nplgBbbksMvFk3ge6FmOa08UFkT+WeN4KJtBMYHJoUSA5Z7ar7gnAY9tMzM9U\nUjASyN9Cn28cCaRf4TWEsUCSSC2ziemsoHt1YZGKVSs46+6mu86Htnsd0Cb4\nRfiRiJUx6X7Vh4tWwJ2Kz6HPsATDZGjCUE67WOkTikL3SgxOLUNuSHTv0ll5\n+x7A1wTXXTL8qbTlL+XEZ7OJ11yvllxhMIvt+oWP2uAiljaOZ3SfO5VoNwTA\nwgEmBtsJlm5sxGii+Zr7HYuYyGrnJhB+aeLJfz6pWzpAeH+hEI45fCbjrdkP\nrMsjRNf2zTFR3+Yx/kQHRv3zl3Ln2FIsp+0XUhQlHYXWVXAr8HyHHfIOzpD/\nZdfEMOhumL+PNH+2eFn9OceJRVsxsjXphpgeIUzTysyOdp72Up0oPb1P31bb\niuApQ8ozR17ogjA5JyzyngrgJj0ARTF1c4IMMDO3IFLXIGXwXL+u3QRDshH9\nAYfT\r\n=aQC/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE8eQyr6W1yKjhI2rlF0dO6z6VQrPZixwJsskAZ7alxmAiEAuCKgR2mqGE+BRyZgCToaukfLLw3HIV8MQlTUVQ+Ti10="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-ddefceb29546858de1b26a22679a575de7b80623_1535466939585_0.5330490411363262"},"_hasShrinkwrap":false},"0.1.0-c5d4edf00772c44441ff8eb729796fc779f9d030":{"name":"molen","version":"0.1.0-c5d4edf00772c44441ff8eb729796fc779f9d030","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"c5d4edf00772c44441ff8eb729796fc779f9d030","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-c5d4edf00772c44441ff8eb729796fc779f9d030","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-UcVZJ5YHnJufOc9jG0NwGalyA3m7TzBcZxMWOmIV4+FQLqXDtxyk8QtQZUh/19bowxpcY+B/JRlpDAQSHFU4YQ==","shasum":"ad3105bba4d5173598cecd52a106515120ff84b9","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-c5d4edf00772c44441ff8eb729796fc779f9d030.tgz","fileCount":36,"unpackedSize":137116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjP0MCRA9TVsSAnZWagAAPooP/R3OJme6EI/maET3KwDa\nWB2YPkXb6udGBWGYYQRQHFLNHqgGtDKscovW6Urgvy/kIAFtgD9zojHFXqGv\nEvaKc0S8lDg5ahab72w2uFP/nI5Oqe0Us+x/LzX3ohmZfk7JXAkP5azav5Xl\nVp3PXjSO06htFyZLUBwk1Ygz27AXTbCwXjmHG6NcsuwFSFN5wU6Uz7gjkimf\nyxoxDlOaB1b9u9ZITvg0+g7kiM+brUYk7sdto0T580PxusUAURDp9GqfUyv/\nA4P3V+VxXkCWlEXRS+7KSYhTD8uikknimkR9hUiRkQhzOIeq5+CnG5FVCoZz\nyNbtA7wfZjT8gNN9DaRKlWxOqibyRkryZfDJJh2a9BmnvXXF0ivfdSB/G4f0\n0klC9F43vTRPHHs2YLXulQagUGcPfLG2hswqM8zIRucDB7/uuntiau5sM+ae\nqQfo2QRYzVU/4NXta0auPA581FJe/kVMcUyiUii3dYu8kdL0X3Q+E78H36rU\nX56loXeqBWX6GBtMQW3TXdoc7fWDuURkG7ewudgimDPR0JUHxjZ5SoZyPCDY\nmXc5oit2IRH7IZDmKYTPTBLsXAEaPzL8LPzmHgvJ78r3r7kDK25D+l4zHtfP\nwvngcHcE4JDgdl1ZLzvml83G0CcRLEhu1Qctmm8VzGzFPInouApXNmePQ90B\nQNQe\r\n=p4j9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCL4rswXE7AVu0+8dXjdE8x108T5X7WKbT/YHu6uipsDAIgL9+rscqZO+ot/kk70I/uq46mGB1mRVDZcpWq4WjuC80="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-c5d4edf00772c44441ff8eb729796fc779f9d030_1535966475781_0.6683528991068919"},"_hasShrinkwrap":false},"0.1.0-b315b4a9e4fe91ebfe2d485ff3799e1793c926aa":{"name":"molen","version":"0.1.0-b315b4a9e4fe91ebfe2d485ff3799e1793c926aa","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"b315b4a9e4fe91ebfe2d485ff3799e1793c926aa","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-b315b4a9e4fe91ebfe2d485ff3799e1793c926aa","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-h4oVXqhLVZ0YOklXbsph63VM1BNhDeyzlGUxfzN/0RLtGgTZdXpZQQBAdlmG9ln4AnPIGFnC+gDZ1Uk5n+H9xA==","shasum":"2806944edddb251977ede23e929f69947f2bc33b","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-b315b4a9e4fe91ebfe2d485ff3799e1793c926aa.tgz","fileCount":36,"unpackedSize":137116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjQiHCRA9TVsSAnZWagAA7TYQAI3gjYnuFt7yHYnkXKuW\n4IPLX2yE0QWPM7dVZhXvYTMIMpxfBkaNV8RydVqpS2VFZx1Q3z5wcnryug9L\n6MCvABjTBctsN/5qT5tW6GSf3jn0R0B+UF5EOVM+x7K4YObVMFtVCf4hm8bG\ncv1SjSYoxtA3GCZRcvESQX4tz/MP+53amRW5P0ITCFaG74swWyUZLF4u394R\nuXNJC80GoEI20Mi4DVPZnEAaJYag+jcXi3EdCWipQNStek31vcyvUFkzTEe0\nutWhVrJEJU1H2QAOZqDJu+/fRyhd9oGlM8JU4jomRYBJLOnLBMi0p1cLjPtS\nk3+evFluQ+bMbe2g3zt1sufq5PQ7RNhwZrnlnOIAGs/+X+ykyVdCq5KcNShD\ntLSxIJ/IBFPv/bUy9tZ29xMrGB37uaWYUlvoRnuL6188rgHKAyJtHpg/uBJk\nFg1OVAdFKtSDvUbAlfOCbqHvPP9QarSRD7onItMvQ5DYj+sOnD55DpZj2llG\nQ5ss4HEM1OqchYUdRodfvHI3+GLbhYi9593KZKJ8gJ8hvCmD+CF09tH+GpFN\nr5dvxUTnMjY+EHgeBzy4BIDmsON4mLQUqzM23cbZMCSoXjXR1+cJeqVQsQ/c\nnaBhTXTkbaV0h70h0UUuFLh8RUdL+fxJvVzxMEYPhewX1VtYIxzwwnkuOUpw\nWGpE\r\n=+1Ut\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG51zm9Ij8IQMYKD+s/3M0GCiXcYYdkiO8av329jxfajAiEAj0bNOyCrw8yiJ46FuIJgqEZhumsTG5UpCG1WV82s8iQ="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-b315b4a9e4fe91ebfe2d485ff3799e1793c926aa_1535969415025_0.1855320877924036"},"_hasShrinkwrap":false},"0.1.0-a8e1ee06a120062be1efd92dbff8841fcbdbf4dc":{"name":"molen","version":"0.1.0-a8e1ee06a120062be1efd92dbff8841fcbdbf4dc","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"a8e1ee06a120062be1efd92dbff8841fcbdbf4dc","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-a8e1ee06a120062be1efd92dbff8841fcbdbf4dc","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-soFmxI5WVRJq2sFaN4o8Ckdl0PMAQve96JGXA0rc9vJlYGT6YKvNh4dBWuXuC5WX4DvzPSClvgD+oHieZ3mw/A==","shasum":"4d8e7970b870c6884896a444e9922a8e95e8a514","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-a8e1ee06a120062be1efd92dbff8841fcbdbf4dc.tgz","fileCount":34,"unpackedSize":146185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjSKKCRA9TVsSAnZWagAA2K0P/jvoyV48AW6iiqQqONkz\n+W0dinMWPv81vlCw4SL/Ca6H0jVsM1O70fdya9jXU5McWFUv8V/RzRbqCALT\n0RqcstCPrdNjx3b8QwK253gdJ8gt+sJCps/c94UvQ09WLNkMQvetyoDIxnwH\nymqCnhiip149oZKZ3/LjVyRUK8Epnh3QKic5ztkhHPmaHVpnKACI+bFs6q++\neOYyvYpYdfmu6YcxBQbrksR5SpZ/H8bVLAEOzf/JPcBS/nd4JsjsfTSWO0rn\nJZT72vFfq5g7d9DKoFpB0ZMqznsgKcO9DanLQiGnmdGhN+/St4bcs5aOgFnI\nzJZp3SAqtketz26HzQbWB+IKDGhKzZOQwjgkzo9lp4/knU4xt9itHo+Ygg4U\nE1iw2DugwdiitCuGQmT3s6TGXjSEXfjacU/z3zOLZKFjB4greqrDrOW/keR3\nzLUXPfO3wQtBM8aFOKxWL7pNIvCMWHZdjYGKG3W0bbHAUHor8F0MICKiG1pj\nvrrJbWmwSueWkfEFBjU4sFSA/rpNgVMaTbFcSsRxNCVSGFQENrBeHZtlN8Tn\nEks4mzqSakKdOB8VXHo03k/Bioh0LPO2UxKtxoR3oVC/orkZ1B6HsnkAhxA4\nQ/1BMcuz9DhMe81iXmReNmFxEYzkgT9J3sEpOnNytXChNamP4iKeHZWmmGaG\nGeVd\r\n=EhhW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQB2kokdpK69Q6smyL9Lm3eb1lQn9vcTRwmvgVSKcSxAIhAKHkak58BLw42VJwQ5rVibEie6AO+g1l+47f0PhEyRPm"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-a8e1ee06a120062be1efd92dbff8841fcbdbf4dc_1535976073302_0.920921059216774"},"_hasShrinkwrap":false},"0.1.0-1-create-an-example-in-which-two-api-s-are-combined-ebe046bb2d61e9c7c1f7154c5ef8d33ec0be988f":{"name":"molen","version":"0.1.0-1-create-an-example-in-which-two-api-s-are-combined-ebe046bb2d61e9c7c1f7154c5ef8d33ec0be988f","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"ebe046bb2d61e9c7c1f7154c5ef8d33ec0be988f","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-1-create-an-example-in-which-two-api-s-are-combined-ebe046bb2d61e9c7c1f7154c5ef8d33ec0be988f","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-ug732oQAs2gep0Nhgs5KJo6byyXrx4+QxKHAEA3/GEGuOrMX777EaeP5cztUnGZ4tvfP6DFuGNmgAM3S17PzaA==","shasum":"7989a641c5b3d01d4e7d8a76bb897d4eab602224","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-1-create-an-example-in-which-two-api-s-are-combined-ebe046bb2d61e9c7c1f7154c5ef8d33ec0be988f.tgz","fileCount":34,"unpackedSize":146257,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjScfCRA9TVsSAnZWagAA5jcP+web/JUrR1X2gbiNPj5t\n2giGlx5AFODJ9Sa+xxAT8tSutjNUIGxFO2TDUTHbFFOcIA688H7HYOyTHZVC\ndQHn1WZqpS0sOdR5BCLwZ5lc2SuOEKNVZ2cIQ23kES+wcANJKrYiFJ3X9Res\nvC1AfbTv0SXOcIlf6KKtkMC72GHFcKxXXM837RyLFvPvbS5Y3GRR2KeP2TqM\nZsDYujJO/12GbyHhWCmOGLWcTFdas77DdtiNcNbNer87Yl9tMKCOTOOtxxKy\nRgTHymOhcdTUABs4B8UUfiPgam8QaYRr8cEHW6yu++P1/0rN7DHJ6ycu0aRr\nocbipw5SrB56/tZR/mMmwcw6ZbFKm12FnOHl6Z6T48reol//LYyyMSxop2iD\ncxjf2Pct/iFP8POLAo757RXuJi5u62PSu8+irdCfecIDl/Y54TeyOMpr3agB\nBPoCSj/NkMua7o/HtSQIylucElodVvUZ4PHBR55bvXFhk6O1LH6c8QoGGCBe\nN6QghChMHUu9WeCqIuP4Bos0BMuYVAlau3r/LrUhLZiIS/7bcxaYrIDu85jg\n12PoZ8znazzgIblapeWtYYN84uIgkh8ZovobBnnaiqomPvVA2XaKnV03hQzD\nrTyPsKPckK+drFwBagDaf1YLd8uVBG+9lmOcX0Q5Os18PkmAXjDojsnBDuPn\nNw6q\r\n=RovL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3keCcgGGtt/E8sj0oIRp6w2RY4xVXWNLKUskRDSm44QIhAIXm6Fs1x6HVjMLdYnfh7sMI8pQ+prM6hi3BSUDf9eQA"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-1-create-an-example-in-which-two-api-s-are-combined-ebe046bb2d61e9c7c1f7154c5ef8d33ec0be988f_1535977246969_0.9681917842897108"},"_hasShrinkwrap":false},"0.1.0-1-create-an-example-in-which-two-api-s-are-combined-e1ec6fed8ca3cdc384ad9b2df8044c618a25d846":{"name":"molen","version":"0.1.0-1-create-an-example-in-which-two-api-s-are-combined-e1ec6fed8ca3cdc384ad9b2df8044c618a25d846","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"e1ec6fed8ca3cdc384ad9b2df8044c618a25d846","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-1-create-an-example-in-which-two-api-s-are-combined-e1ec6fed8ca3cdc384ad9b2df8044c618a25d846","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-w1mO/sJvkP4E7XzvYujKUW5up192KDhX05Q3UrHGCxEVW8bUcm3HjZ0mnKX9UcSMQppapSHooIoJ4gYhNtQCYA==","shasum":"56880516184a012946a61a59c67bedb568141d08","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-1-create-an-example-in-which-two-api-s-are-combined-e1ec6fed8ca3cdc384ad9b2df8044c618a25d846.tgz","fileCount":38,"unpackedSize":192151,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjU5GCRA9TVsSAnZWagAAxaQP+QFualq8lBjs9++vd/Dx\nTIkLG7J/CIqYFwePAPnV6ogO+hABwwjTdve4i0RuCvB6oEbLPmbohyyJZrRH\njuWOp7G5kHE7QFjNLvQVus9QG94pA+jdaPguH5gegfekU58LUtbAoXXohUmx\nzgj3GGIppIIMXwyh6iPNJNudqksvcq/M+wF9b5DN6fschRJhZIJzcXvhoJlF\nyC+0C5exMwGh19Pu2eTlx0gXE8HJdcbkzT6wv+KRjALInVFpnNQWPxsfFfE3\n60Apz7qYVYBdFugv/32sRTMUTASIbOSwEC3fU+uGcK6I2whw7maYTQxBzMgg\nQMiNPv1i9NHV61fz/JmolZCRHW5bJa3wBwE7Nd7ETa9yzmcPSYFCRrqFDTwz\nmon4lu1DKkmkYmTdY1xv7CM4x4IKx0ua+3i5PTeZC0Lh/2OMd3eA6G8+lIYw\nzDK/gqJvJe0r07zmu9mCXkrVfaDtlpKQBGhUPg572gJDipjjs0J6yOPmOpzU\nmCCjdn/UK+B93PP27PQjpuAD2FfBMiBkIeCllz+Fw5VlfEmMYC6WhwBoV1PT\nQeiyATzWPui7TqBgtve8h7YTPSAnK495f8nhG5FqZLreD2fdkEIIscKD0G0b\nFkEbDcSvkmXLqeaz6c9HiNbKxLDq1oI6itd6YpPggNCqisZNCd22od5r7uv6\n/Xgh\r\n=lOVO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEPJfAqU3fVDJdwG38SK5rP0XHf+m64cYYq/f1w69fInAiBPQeHLOfw8fr1C4573CQtnWIujEEdUI2UO8vnqXORQTw=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-1-create-an-example-in-which-two-api-s-are-combined-e1ec6fed8ca3cdc384ad9b2df8044c618a25d846_1535987269488_0.7836756986018318"},"_hasShrinkwrap":false},"0.1.0-master-de3a9965c417a09e2f6f67f5235e1a2f657979a5":{"name":"molen","version":"0.1.0-master-de3a9965c417a09e2f6f67f5235e1a2f657979a5","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"de3a9965c417a09e2f6f67f5235e1a2f657979a5","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-master-de3a9965c417a09e2f6f67f5235e1a2f657979a5","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-JBxx4w+Izhqc+xQk9RZcuCSiQHY6RioPJePpH3YYqKuAlANn5J8iuhb2b10mQWIsmHVJkQBTEZh57tTUsZXPSQ==","shasum":"13fd31af1a2460aab5ad2062d4773a6089214d25","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-de3a9965c417a09e2f6f67f5235e1a2f657979a5.tgz","fileCount":38,"unpackedSize":192106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj56XCRA9TVsSAnZWagAAtDUP/2mKsMMe65ku0rQKvcCC\nRx6xetQmfZCcsLRcoYNM3oxYRSW9Y3Ie+MD+NIMQhM6pJCyplBiXp5wKR6Z8\nsOVaejsZqs2Qay9hsfC3czgcxEV20wA9peTny6HONtQiYxpiZ9eOlhq3xI3H\nDtcay+LI3OzCBeqv9HrjQnkeQBehM3oWdClT1HgQTdxFbTegmqQsqgg8Or98\nQilwuTthpwBn2oS4mxIUtkjQy1odOuQ2G0xByN3BFeuqj+3ESRPk8/kIoFeW\nv5fIo7b+Cs/Ioh7J9IN+Wh6BhrKZ0EGCRt5oRFWaRVw0boXwZtdZMNMN1T20\nbFMcWF4EoI6pXl8FWzCp8bEmQVrVQJmDv/JyyHvqAJ+I0DZFuKdNejLjrB+v\njPlPeX5VZFADXdXfy9+KJn4OJpCPTIkbZ03mHXGoMyGR8m72sarSTtwiCBzX\nnJkqVObhqPt/cc9J1CVsv/oNAEBLcVo9RGIz2cYlo9Yxve6k1JpQ28gbbsWf\nPhTwJMXcD2PUyGOcC3x2R7KJZDbfn657E9CCmm14PbY0NCmYoSeJPBkbz3r4\nJSBMC/8GgTaooU+ITcEkTeAXiHrrB/vDdgBI7EQxvglsQLSl8rTOLDo8xW0S\nVcuhyB7iNomqQT49IC96FJyWf5t4IUNugLbWFPODGfvSRlQU+lQwPtLNYAWp\nxatD\r\n=wd1a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8fbW+ov9JnHDu21/qhj+6FmNISDYuwoKOIhHXFmKs7wIhAOOSQ7JYq9CHScS7pqnZ0bL8goYZsDHbwnnEGysSAY6c"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-de3a9965c417a09e2f6f67f5235e1a2f657979a5_1536138902464_0.4793022124262387"},"_hasShrinkwrap":false},"0.1.0-2-rework-api-de3a9965c417a09e2f6f67f5235e1a2f657979a5":{"name":"molen","version":"0.1.0-2-rework-api-de3a9965c417a09e2f6f67f5235e1a2f657979a5","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"de3a9965c417a09e2f6f67f5235e1a2f657979a5","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-2-rework-api-de3a9965c417a09e2f6f67f5235e1a2f657979a5","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-ntPk8dzkMyzPK/4STyR9zfyzvmHr4RJJTzJwMhC1i76IOhwAYFhFq2BHxbFAeQWNiZgfonL0+T8cCuoYvJUuCg==","shasum":"fef58d705c60e28c03d19e5a8bfda3670895c298","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-2-rework-api-de3a9965c417a09e2f6f67f5235e1a2f657979a5.tgz","fileCount":38,"unpackedSize":192112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj6qKCRA9TVsSAnZWagAAOtkQAJiPwpvNZathsx4dBQqo\nUW5C8jcDaO9W44yQMXXmtsu3AlNomb+UIhHb9xA57f9Kxn+QQECWFOSi0D2A\nxHSO4KNxbXMY1vTHJOBFD+fm3JESkHDgZbbdtzp2xOiRzbQ+SbrFP0ABD2hD\nIwUpsWs5rUhZhHDpYpBGvqtM0TpS51iDLUMU5K/fX3A8Tm0JE005Gi4QcJvy\n/MYcgb80dIScsIw92JYqJzSibkpjj4DVnG6X0eDL1DSlNPWvHkIvoDGgC2Xx\nbvDsw2aqIJ9aq7DtKxyxjfz26MmQD9EL3gHlbQoth+7PKcfWPiwEZdZnJDaJ\nSbjL+I8O3C1vOuIWaQdN0rTtIgrypVwO24bw64rh/glbX29orS3g9WMvZpSW\nW3A3uA56CXuz3NG9yRtebjS6zUek1sq7ZwfAacahPXO/DwdF04TnFRYNDtT9\ncUHmSZTivTPOglZT5wNZr/osB7PXq0djnm0nHLKh2hB7r0UuVCdY/hZm9VNF\nWC65GQPosocEGsnRNSPl14MKpwVkiSynV/+kjlhL4E2zxdE2nApdT3ZCe5te\nBP4MXQTLKkYhnOPrry0turnMAzUaFsZ3XJp6jB/YXhgRQonBS2sxWu+Hi/Ls\ndAst2eydzzDGOGxxJWbrV7mLC/3mx747keG5JD1i81u05eaR81zLZ8EK+aDD\n2uHw\r\n=TWC7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDki+yEYdzQNmiJEMDzblqwwUNSCee/EKGvZvR7xo7/yQIgIImS9Htr+oasBgr8c5CQa/r5YsJ6iBlycYxyawiWAEI="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-2-rework-api-de3a9965c417a09e2f6f67f5235e1a2f657979a5_1536141961827_0.7703836017441517"},"_hasShrinkwrap":false},"0.1.0-2-rework-api-7d5d98abf9b0d1f6e37689aea4d8ea87be859cc4":{"name":"molen","version":"0.1.0-2-rework-api-7d5d98abf9b0d1f6e37689aea4d8ea87be859cc4","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"7d5d98abf9b0d1f6e37689aea4d8ea87be859cc4","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-2-rework-api-7d5d98abf9b0d1f6e37689aea4d8ea87be859cc4","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-ZO43LCNwPHF1FC9826FHrfEsujaKzAg37Ay9+g6SGryxGhxMSwsms51szR7L7SJWI5NADUu+L41d45zqVFtT/A==","shasum":"4db1177c1fbf76e09722bdaafdf3a196d736f14b","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-2-rework-api-7d5d98abf9b0d1f6e37689aea4d8ea87be859cc4.tgz","fileCount":38,"unpackedSize":187286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj+CMCRA9TVsSAnZWagAAdecP/iFKZXRnBOsS+pXAJ9AC\nFVO4h1tpReVQwRB+dtvWQiFw/+DEQJcyZE5cfTNjUJeRtK191jDNRblx2qhC\nEoHJA0I64jpUS3eSuogZlG7kynQWzV6+Zkmg3irvbwefMz9ujBhd5SGq8U6L\nUHKGAk+kB6kXcQ76fbGBlVcdywthgY6K3LVqJFywGO66LS1u6uY/2AenC3Qa\nwZVhtlTaAy+HrfcVjU3TXsmxcPKljj0g8Qud6IpMKyEf6kMogL1x1M993abC\nStEZY0uWWj6W3Qar2/NW/+8t3yOJY5dZPa0EShgTeAOZ4FTHKGHM4UJFrZqj\n18jcAh6gq5ZMgAlvMcE593YhAJULKW+Y9SRlVKp7NjSoQwhOdSDR/LE4a5IX\ncSp0fcL8W3/1BLPeJqTWT82n/vgWL4PzAW+r3sYyJ4SEksds2zeu4ZJkQ/Ua\nZw+QDB6Sf0ajcwgSApT4eYrvRiXf0VsV+e7mMjMI30/iUe+ayifbJj0lK/Rx\nkroRofhCfJRsZARlxgtBd0QlBFFws0kbm4J3lsgv7/4I2hVkUuWtdMedzcUn\njrqwL9uJgbqhpOYBxwCn2ffjDrQ+j3MLCmMgAWCTTTXhCDVwVNugv+Httu4u\nc8z2soAWQG1LsAjJzg0tv5G8zbOrYKaubro6cU1ZVzV1kblCoJX+HOB+fzGP\nWwEY\r\n=4ZXu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClH24vjrtxFhY5zS5GXu3nE3B3VV7NS8+/tQmd/dJTiQIgV0Fx01oMnJe4U5fxAoQVoxq48yRoUadIpaat6MhVhrc="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-2-rework-api-7d5d98abf9b0d1f6e37689aea4d8ea87be859cc4_1536155787951_0.06538620453558175"},"_hasShrinkwrap":false},"0.1.0-2-rework-api-24709f1e66de60ed06c5b248653e0984972d8f95":{"name":"molen","version":"0.1.0-2-rework-api-24709f1e66de60ed06c5b248653e0984972d8f95","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"24709f1e66de60ed06c5b248653e0984972d8f95","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-2-rework-api-24709f1e66de60ed06c5b248653e0984972d8f95","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-GqCF4OyeNYvJVh/D6bq/RqZKInLAjhAzTVYG00GZRSrbZgmgotk+k+CnrG8qMgbSZgIxdA0N86hbj3CO6aNEAQ==","shasum":"80220270a10ebd50fe9ef52f1398c41f1f8b2a0f","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-2-rework-api-24709f1e66de60ed06c5b248653e0984972d8f95.tgz","fileCount":38,"unpackedSize":187593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj+MnCRA9TVsSAnZWagAA0xcP/1S11jzcomtj30Og/P3F\nue9OmwP6gHgmne9CwJhYv7kWLf7uXTwV6PA0wYGdv1tolk1R2kghYjyHyHBv\nhpgl05AMgY+5gUvsXQa/uGFY5i6Bu+uRkJSTlaVCbKVto+P8zW6vJQupP5bo\nSa1LWxoAtxCtpO7Qx/MWXiPRsjIt5MBdzZWQaqM4fVdB2im5AcywfAuCmzNU\nZgJSDCksIlE0bC02rQ7fuBg0Xr+YZIJd0ynCyiqLf9VMWnj+WYmLR28EbeHr\nyC6EiEtYegoI31HN8XEwK5f/vWeyotlfuSw/nq5SDi1RrmMXUyffFdo2LwTL\nzK6CcCt+JOPBOmKyCuH1lys3pTjNKxsxOtek15+ZT+ZuTiEOoU+ohIKRTjc8\n5SE5KbPDeaF1HaGtsHqGfVWRKfsVRisNC23sNkD/6bV3JcIk5LETPWJtGAH2\nJxD3Gzarx7uhni3XrVHrCDUrLUFgzUAjpUwFo6rrvLafpFRwNIBXWb4Ok/TW\nSwvZY1NYTByG2oHgo/XYuxVOelWkXGj+hGLGcCcBAgK7iS5d3MBagLQWNjbi\noHALlS4szl/MTklPmZP6GpzpJ4rMGbrhIZDIl5viIJ5Q0Bp6FMOhPLq3nEmX\ntdNm/ul9y8tH40olX/blu0g2rR5fZ0NzIbZM8zY2aoQ9xYvBRrvSrPAUSf7o\nMM6C\r\n=HN2k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICqHNEr0syOFEUKxM9nFZkjJyuWxinGCIOaLxI1hlYulAiEAoMTN3WyiT4p6t4cLrjE4EOTy61+PF3FGHnVgsm7QCgo="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-2-rework-api-24709f1e66de60ed06c5b248653e0984972d8f95_1536156454820_0.9627103028187367"},"_hasShrinkwrap":false},"0.1.0-2-rework-api-4d38714c3819befa72493def54a23e07dc6701b8":{"name":"molen","version":"0.1.0-2-rework-api-4d38714c3819befa72493def54a23e07dc6701b8","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"4d38714c3819befa72493def54a23e07dc6701b8","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-2-rework-api-4d38714c3819befa72493def54a23e07dc6701b8","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-NAB1z5TsU8wSUs2EnQ09D+pjHY2xHAVnFegmyWmC5mKXO9BLvKVZbWhEoJcP4U7m+Ro5Eq2qanCOeZqQag5vww==","shasum":"50cadf818b57c27652a3898d9c8e5e00426237c6","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-2-rework-api-4d38714c3819befa72493def54a23e07dc6701b8.tgz","fileCount":38,"unpackedSize":187199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj+etCRA9TVsSAnZWagAAkI8P/iBzCouKU2v3LaBFqgpN\n4Oj85WW+EpAQJog8w9/nLY5V1uHJxDSe95cLmt/9uT/j0EqqJb7db3DwIM1r\nUkj/WOUFbkDBrRlr1H0LJKNogDrSyhk4h+LVs6FFYn80Ya1MAt29GxataGus\nIc6ck427cHLbCTB5ssLHr5D4PWNhzTF1ppwWOATtjJcyTKMt4t3/0DPE8X64\n/ABEpdd6XhqdYU7CAvZXucRp31M7jQ57anN7r5HHCPWxFcr2qIfOnUG1QHuL\nGT74co9yl637pEnI2scaEGwIVWbbhIBNQmsbD5aXlhgi70AAkh2p5O/9nsjS\nR9nZIKzJbcRF8uy/UHgZVCbK+YgA98LDpgW91++rwOl9XDBgW58L6hx6P8MH\n5NWochyt6XACupwakLGMSw3nc1j19m8DwFG16ZC73bcmdX0fsldU3LS5Phks\n5iNFjZPbX+h3NElqLbu7HU/UTJgLKgOKEoPH2fZa4rNzzLnAm0eIblbKcIA7\nbqu0ocEAl0nwUc36lnY9LGFZRcbrkftUAeTzYPDwdk3z3q3X67xInLHztSHn\nuqEaMRgFOr/hDVW3FdRrv7+4ytH8/72Z2ljpEPhTj7u+9RrSjGW8S2BxN1Yy\nZFpRbgKkUXmenHfy9NUOKVmnGDLilZSeVDe0CBkYwU47bxxstUaekEVM8/qp\nVLGa\r\n=o7Gm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGYMgeqk6LYRIUgQVhnh9xncw8yjTTBvvVuKJAD5aIvWAiEAtnZH1TBvf2T5UlKiMvwjMOQb5ti3wcl+flM1tKDlIKU="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-2-rework-api-4d38714c3819befa72493def54a23e07dc6701b8_1536157613301_0.914164411055671"},"_hasShrinkwrap":false},"0.1.0-master-7996e224d182adaf6d08dda6a840de98012130c9":{"name":"molen","version":"0.1.0-master-7996e224d182adaf6d08dda6a840de98012130c9","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"7996e224d182adaf6d08dda6a840de98012130c9","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-master-7996e224d182adaf6d08dda6a840de98012130c9","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-v0t+2JyBlmWdlJ7oYeR2R7f6k1vRaOTGp0+4nCBh5S4vsTr6lRQQ5KaZtKjjZEyGpxwSv8hwRYnU+iof34WqlQ==","shasum":"f5775e470dd317c1189510f6b3174b7b5f07b87d","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-7996e224d182adaf6d08dda6a840de98012130c9.tgz","fileCount":38,"unpackedSize":187193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj+jpCRA9TVsSAnZWagAAvy0QAJDCkTD6+OYCFkfKAjDW\nO1/yFLEgupt3GAZfSa4FMrPGdMMwSymvIt8z3YIZrcm+Kenfdn0n+KYv2qFq\nulUSEpjyLsiqzazHoVYYZ3pRADn9hcxZ++PODM45gkSHRqcResktInDNbYi+\n4DTJq7ep1QlpwFySTC4oVhUlQAGb4j6Aa9dH0CpVRx+0J+8Y1c5HR1UHnZcB\nrAyXgps2gw//PHGZ+SnG/mRG+sAu0u/yIvATk6QgX3jL75G/7FdE/euYTass\ngm9ktlP8invkThtSHwLrGYlfpSWrNZK8kxxA2Rx+1/6IrHrXAJfgvMHaF84q\nRp1ILdeyAAIPBysPli8lqrkhYkLW/W96ce1wLuWlxkSJh8rogunqKW4d1yaq\nVUtv1pTXyM3et8R+6zi7+rFoauE3gRdSxaHWsLGmXq5wKAdti9Army7Fx/Mz\nR0FECXyfqpJFYD4fdufw45Ilei92gkW3YOvb5zwUr9RF9LMFgoEDeUTynSPW\nxMjUAOXuZ38sxRYMNmc37EauwRSQCyGkWx7wznMxN+xKE87gJfqETlryjKS8\nvJ0/PB2dKyhE6Q277sLJBRqAQkWmNeUeZYY1Ru3A/dW6BLBZY+7hWx9mPzTi\nf7jQEqU/2VMWlzAiJTI8A1jawur61EPmT9KEfYa2hrVhX0bNWIzsMAQgmJw9\nXsOR\r\n=jOBL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCABZBQDOJtvtPHPPbA5dYQRegWMRDZMlkC+vtOG9apxQIhAL2lY0SYL6AtZpfFUMH6JKaVdQMV2maa/Yl8gXoYVTH2"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-7996e224d182adaf6d08dda6a840de98012130c9_1536157928619_0.6308921559750118"},"_hasShrinkwrap":false},"0.1.0-master-59b9dad056563cc734ebc828fae61c985b7f3929":{"name":"molen","version":"0.1.0-master-59b9dad056563cc734ebc828fae61c985b7f3929","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"59b9dad056563cc734ebc828fae61c985b7f3929","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-master-59b9dad056563cc734ebc828fae61c985b7f3929","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-ZXAXEkrgfMlnRRNrQNeIXcK01PGufzeZEJHFRS5iMm3yt8m7Vt/4Jb1PiRubQ4PpJf4B9gvxxFn6LzslcCrLUA==","shasum":"bc616399fce71585c6a325862f3b1a1fada9c478","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-59b9dad056563cc734ebc828fae61c985b7f3929.tgz","fileCount":38,"unpackedSize":187193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJblkJsCRA9TVsSAnZWagAAHlIP/iw48AYW2jklQS3fh4Ih\nm3a2cfCiX6VnswSxkJsLMePWFLRdOHKiyJNsL6iZV3XGrT2MmfMjRpx8aaJ7\nj7MWgm5am+2tCu5Rp3fnwUEJYYPk4aItc7+QOsJYd1rXfgdn6+L8KTaLWlpp\nXZhy4xeXd+ug0PUV1PJni2ptioHCCbuUMo3KXhGERp9/uHLFYMvXMyOxIIKk\nFw/KgQxyP6hqhZ1B6b9p21H2p6e8ynJs1FVGZgpRkb5eYUUbV9oMACY4mKAP\nVxJ4gjwNGRnHTBGYfa7mnc+pzWNMZsv7Z6sCboNBJPZVdyCgFYYPcnHJdaKZ\nNADiTA9pPcbvW6g0TSHq+NB9pSNdfVIfTA0x6Evikn0Le8cH1z393K/rKIOT\n2VuQOf6JMBTGeJ3l+BUp6mpezPl6syxceJv7/JFXxR9s7XgTtU5TPO7JmgpB\nxLUIxqG6/ViV1SBjO97PrcU5cgebtcagtGPo9IXp+kDADQGZwl0GFi2aFbpU\no1JTqhc8gvxZ3TlYolXLxY2PRZudFCKaeYKPrfXWELqCCwXfb2S0HogpCZWp\nfsnUl0J1IMulSUKHKwKnbKetutC/CR/cqpqkqxA+RQt0B1LTIF+CoQLu3Tbf\nzWB+IQszDgRLkKyUFlu+RCKAEYhV8uzUZOFepMYms6mis4d24DA4TmMOWkfQ\nZLbo\r\n=ZICR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDcZzWnOs4471bWBpAcqDz4Ca9jP1OaJcZHqV26MQcNHAiAs1WYUqk9FMBjEyKiOQSZsFGiTKGly7FSWdCR1dEbCDQ=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-59b9dad056563cc734ebc828fae61c985b7f3929_1536574059728_0.02061244747216784"},"_hasShrinkwrap":false},"0.1.0-master-556d8dea7490f77cd295690e50912b56bc5b9c11":{"name":"molen","version":"0.1.0-master-556d8dea7490f77cd295690e50912b56bc5b9c11","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"556d8dea7490f77cd295690e50912b56bc5b9c11","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-master-556d8dea7490f77cd295690e50912b56bc5b9c11","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-Cu2Jal5TTGzoM0+z70oQUAK953g+XrCOnocFhkYY+EIg5ta/rNrtym8NiFU6iAM28g9GOTTh+Tdy5xpHICuzYw==","shasum":"f3a6346295f1514d6d6a920e338fa625dc807a73","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-556d8dea7490f77cd295690e50912b56bc5b9c11.tgz","fileCount":38,"unpackedSize":187562,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJblk3xCRA9TVsSAnZWagAAECQP/0ISrHrIrnfvdsSErOZk\nxAESDD0VCB+pJM7Xkhl7Pc4vs4Upy78ZtQty+wolP5gVtmYU44MTkwXAGy9y\nOIe2nNcjXxqlrg08hGh1NROGKSlKkGCmOXODklnukR5cSIQXuXSmyUG2Zsab\nW4ZL8MyMb/Pfpxd5gY3gb8GmMm4vMvXjTL766anx3maeS7do81vKeDu62kwM\nbHSOOYrwhcSdVUhjgV9xlyHm+emYpViYiPDJVEMQxaxuyRGiNJOvYNHdO5MR\nshOcA/Z7tXN4yGWs3D9bq8N6a3V2+uRblnyDlAHqpHs7lx1ndMEX1iMFVovx\nwHt05Ijj7xT4A0wGXPhipkhAEv//hmhYsp6T2mSJkuMVsuj4Tw+DBG7A+6jW\niTmAcXZMBq+nPlwyUR2fGq44QnuKKWF/hBPEMIqyrvHe1cIOCjtzdYDSD2XR\nPlICb88eaGjNScp06l4wmNRic8zwMQRvrtJW81JslUahUCCxIV+rt/iSQzAP\ns4fcFD6qsnU6Ilp7cNV3FbS/J/Yyxbeh58AFK+SikFxOcwTjO2jxEhRKfUGK\nkapQvEI+JMl8Xr1KzoL6I5ke3rh17Ur0m9RMnBguS/YRzmwK3PSyOjMbeDqn\nTZQY3kKTuOdFuKTxayplhVwG5pDjiYB5xvIGR7OZ73R/ym2bqSx33uq7DbS+\npZbf\r\n=JiJI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHVzZI4IRhVXEpIH7gqYL51j9tm2ZdJxpdp/wNd2BAWIAiEA1fZ1j09eBGyFz1jpT/xxkBU9ofQmhtBIYyWVifWsCE8="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-556d8dea7490f77cd295690e50912b56bc5b9c11_1536577009411_0.13483819191484314"},"_hasShrinkwrap":false},"0.1.0-master-c5fd50b94c1eadc6e6deda352f5d06aae5d4303a":{"name":"molen","version":"0.1.0-master-c5fd50b94c1eadc6e6deda352f5d06aae5d4303a","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"c5fd50b94c1eadc6e6deda352f5d06aae5d4303a","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-master-c5fd50b94c1eadc6e6deda352f5d06aae5d4303a","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-O0eWDzLq7nVQVlgKLx3gbufhMlxMc3Ui08O+MMAAe3YhR0Q8WZpQD384x+kJpKg27Vj5Fl852BavWowlRriVjA==","shasum":"e7b189c02eca8aa5d9ede176e4e479546f95ee3c","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-c5fd50b94c1eadc6e6deda352f5d06aae5d4303a.tgz","fileCount":38,"unpackedSize":187804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbllHKCRA9TVsSAnZWagAACpwP/RO+UwDmVdqWA55OcCYh\nlTYE+le1KS//2bcWickF/WnmftFBJlPempVk6llKd18mHOg2Bb+91xUfG5FE\n+ABb0SVviEHAcauAiU9heOG/gmGHCUhlOcBs2N6a61cpzlP9WDU+73URA77T\np6hDFVAUFNGbsgyoi3oAVslFIs7Hbxt14pF2xbN+BDRSw5B0OKJwv4GU8ESo\nzI+muxs73kaaW3na2QMtlvx1L0hB3DK5Gsp7MZeHyNCwhLCoZSTlpLkOQ3ac\n0l4FN79fPlhxcWHQ19CdCTS3/tGangdVYy1NSjrHrcHbp8ttY6GwTB759pXa\njqpuUymOOawFiMNzgO3izqnbUToZgK1X2Ms022hXMe1MO/LYtCUUe+qxhIIj\nLy6DHKn3ELCfr//twgeK4VG5KAhMFZpKkzh0uz8vnLcBdQ/kGsBJa6hwn3bi\nEMXEaSmJhb6Lon9Te5MoWeqqejeRKsSXAC/XiKXmGKmYTGEOYBxLD/+2z6kj\nJnllsMsILF0tG7915IFILx9cvDlqYqWzSoUUcdTqwVVLpf25wx/tH2LEgvH8\nx9SG2OW3WS5uSaNxB650jaAjnqPgIxIa8Q4QNNKP4FHZNDbMaKfeyNZpTqLR\nEsxMjV03bMf0iYjJPwnKwbiC33JZisvdrCjFVlDdYgSUqvBXInZ67SFU78pI\ndphE\r\n=0A4b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHtK3LlqINr68ef62qeAD6SavXhG7rohZhcdUiydABhPAiAs//Hb+OABdXpmHoo7iVNMSXL8OgcmIGcHdHDAaTTnZA=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-c5fd50b94c1eadc6e6deda352f5d06aae5d4303a_1536577993815_0.9757349401662649"},"_hasShrinkwrap":false},"0.1.0-master-7cc56163dd472067bd585d477c0c74ee92d58393":{"name":"molen","version":"0.1.0-master-7cc56163dd472067bd585d477c0c74ee92d58393","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"7cc56163dd472067bd585d477c0c74ee92d58393","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-master-7cc56163dd472067bd585d477c0c74ee92d58393","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-ZGpNOwNQisN3BvTSI1ofVaraTtD5hZKDu+bPHg6RBH6xlP08IzZY+a/Hmp1k+lcDJgG7O4JSHOF29JNoVuNiEw==","shasum":"a8e5a1a1385d0b2688e342f802249a29207ee12c","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-7cc56163dd472067bd585d477c0c74ee92d58393.tgz","fileCount":38,"unpackedSize":187946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbllaiCRA9TVsSAnZWagAAJmcP/06RaVzoYaW/GIpwJLOR\nwq+okFYHCThT7HgJm9XYuFkSZOoMhXjFJuQq2TrToLsIx43cWfTXDFA4qQVp\nazmGUYAr0/76/z62Q2g8ksLev4VNQi1Ul00vCx+VIdo4mQyXfoETf6PHSI35\nNrlaXh+X2gBLIaX2W+qMv6bMMRbUJH1/PC+Kc+y72o03Ey8o0Nn7bQCMQEkK\nU7gNv3cZZ1urHJ1cd9BrWEJm7yd3krWk8RcjMNG0zqJ7KJQZmeD8qDyxe2Ro\nyd9jstZbEpUb3FNA9RopLc0xj3sRmhdKaXXaJeVoFMKJTaloQ34ScCsMjWdK\nHGoUZao5FJ9XT9x5o8bLX7tLj9SZf3KyRei/GNRLtQzMQPq7a7pfRJ8tVipc\nPf+mzVqMV4fRo8axpVfdjYxFUtfTeSmWGq1S1u+MVgVCHH4dY/5nfd+y7td/\nj6A7scl43fd5wvdS18OU2O54VUW6W10SVVKvcJDNd/lPn45snKkcMDDbZAHc\nbaELSWzbpbRmlN08Yso2sLZSPKSPShoE92CtCpXdDCGPr52U2ZyU5oyKzCtO\n2pXeJQoxh6Oi5T2o2hxwQkQRxrEcPiPnfkj75ZbKkeos9rqfJ1B77tW/25i1\nIeiqQLogUnLSYJQ5TazG9CsL3xqwCkvHYQMnejxPKJKioZZT5OntSr1bXDQ4\nSZNa\r\n=5tT0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHQpQBFX0oWVQIaVuNTOlqHqEHJM9t51tzbNWES42boAiEAsccWzt01sAjCP9hT+emkD1jD/PyK1GxsMCC3JZrYtTo="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-7cc56163dd472067bd585d477c0c74ee92d58393_1536579233891_0.6948681582016822"},"_hasShrinkwrap":false},"0.1.0-4-experiment-with-a-convenience-serialisation-method-7cc56163dd472067bd585d477c0c74ee92d58393":{"name":"molen","version":"0.1.0-4-experiment-with-a-convenience-serialisation-method-7cc56163dd472067bd585d477c0c74ee92d58393","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"7cc56163dd472067bd585d477c0c74ee92d58393","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-4-experiment-with-a-convenience-serialisation-method-7cc56163dd472067bd585d477c0c74ee92d58393","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-+6bZ95QVWBkRRcPh0ka2pzMaVnqJ9GZgkeneC4vgfKWL3Bcp/EaSUtL1BLmP40t4xRHSxdNYUNtq1Nh4NAN0zA==","shasum":"fefc37b31b0e0d523704426063f3434ff2abd534","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-4-experiment-with-a-convenience-serialisation-method-7cc56163dd472067bd585d477c0c74ee92d58393.tgz","fileCount":38,"unpackedSize":187992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl6/jCRA9TVsSAnZWagAAF5YP/R1Wl5Wzz+8nayYNm7eg\nCUpOQlxEufBr6Lv0swGXeb0H8a5lC7lY99pCDsq7+/65p/rszByCY0JLocgP\nqv76ajQeDiwmFPnczSH1ax57sfJdEyvyDt5bk7C5QyoRRiamCmA5JQozwKdE\nLxd2ZUbLM6vBf8mBBR0ZkOInWt7hpmLcGDuZeWsLfgWoMysCsaMt0bL3BzzA\nGEs2BWEfDvlNZj0jqoMdNWotRmtzqAItlj0lPpqtUC9qjsJvfKy9ZHvzVDk4\nRHn1iDVM4t6BXNZ7pGaOpt6DLZ0uxH/YepDguM49jdkx1sARcdpXVKjteVlw\n0mjE9yYySng3TnjzfaPmn9mlSls9hVE+L0/PjPmvbDfYjx6uekyMw7Jv7x69\nubulJECnMrOyvlLLMhgj7eaPPkXQ/igSFVm/Exw9znwI8nJdags08MqsWI/N\nmcaQ1Pceje/lKkZQND/isCAkMnA/Hdo2d38d9teh/2auqqft75bwkMuPBPsi\nx8gM7JNpBY/L6Tz0OkHkN/C5Ygpci7HgcoyjOmXPnfPuf6aYLZDav7cmIeD0\n/DhdHPxx29Qu6cqRdtE778/Z/YZ4DRy0t0X+d+gOWAc9vqgJstQxB8pBgFd7\nRxRPNHr3N6/OtZCZcbDTxn99WnFXC9ov9B1bBUvN+3AEyA3NL1G3LvxRBkHG\nW3qq\r\n=xNfW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGD6qn3X2e/wzqPk7iwAJl2PLqITKHB5O/L4ZPOX/T6KAiA70cMyDfXOa4XuKqo0zyM6nhY5LyXKGvghUljFikaaqg=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-4-experiment-with-a-convenience-serialisation-method-7cc56163dd472067bd585d477c0c74ee92d58393_1536667603375_0.9225250734015069"},"_hasShrinkwrap":false},"0.1.0-5-export-drivers-from-the-top-level-7cc56163dd472067bd585d477c0c74ee92d58393":{"name":"molen","version":"0.1.0-5-export-drivers-from-the-top-level-7cc56163dd472067bd585d477c0c74ee92d58393","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"7cc56163dd472067bd585d477c0c74ee92d58393","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-5-export-drivers-from-the-top-level-7cc56163dd472067bd585d477c0c74ee92d58393","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-joJNGVnlgrDAXEHf07Zi0rPtZrjN2k7bZeHNENCKppYVua9qfYdC16CAyG/P9JCf399f1iP4EHSx5bPGDVe2pA==","shasum":"ce935bf30c01a5e7e84f1e8bc66101de1d3dc60d","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-5-export-drivers-from-the-top-level-7cc56163dd472067bd585d477c0c74ee92d58393.tgz","fileCount":38,"unpackedSize":187975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl6/2CRA9TVsSAnZWagAAgYYP/Av9lbAMof9QCPS/02aq\n2UKnZN3kN6LEU8EWLy2QtsLcNZIizXfYuGyRe97YcqoLBmB30y+gvQao0Fqd\n0Qca9ysj/hzLhRFQfH6VBjBd7va24Dkvoxs7BH8Ahg9TkA2exBbQNnMpedHH\n15c/B+c26P4b7tS1Mw61do/SVVujZGR6tAeOUaR6fh6GDknMRpdUe+gYoqxD\n3spkegwY+0O4D+l58gTB1C5cW/baQzr5h3wuHJVgQo6cVpIOzdUUCMTlrtS+\n0N3A1jqrF99Z3h+h56Uu3vvnR+7nDamfizPZ53TGPIJCxvmTq+dHerC3Cxf0\nfGu/vWre5K+WdDnxvdnKS9zNzHEnRkFs0Jz2GFTRN2KY4YrfvOYiuImcJqdX\n0nI/K49dnjdp9at/bgjHeWLmfwtUJE/vGOwRHNYUzAcvufiyjTDl9yCoVXAS\n0SnwTQWfrXwSMfoeS9POgZQ+1yftCLTterUxaFDiBx/Y8gPbUJse9GU2k8QA\nw6PGp4E2hLDPe8PUoiutdq6WgKo253RtvXWxsmQ6oHroAssigVevbtEHpU7J\nRgCsv98cAJb5S/rkQPHp5zrfEgUAh8x2rrx7e7wAScUadevX2gxKDCkd++UJ\nA/5iRGIfuoMvJhbK+E7jt4b7LCi04vOKN+dl9jQhLNfNBn0FrWvmJpGZIv4L\nxHiH\r\n=FsM2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGygglY+UvZyl14xFmUc1lnRnS1P0DeQuSIPjQX2wM8cAiBEehrxoioFJBXn+qHdeVi20TpzNR/LpUzEj9FQ27PLmg=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-5-export-drivers-from-the-top-level-7cc56163dd472067bd585d477c0c74ee92d58393_1536667638293_0.7521611457614283"},"_hasShrinkwrap":false},"0.1.0-5-export-drivers-from-the-top-level-3fbbee098df791fbcc3962a539f6daceb1fbe994":{"name":"molen","version":"0.1.0-5-export-drivers-from-the-top-level-3fbbee098df791fbcc3962a539f6daceb1fbe994","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"3fbbee098df791fbcc3962a539f6daceb1fbe994","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-5-export-drivers-from-the-top-level-3fbbee098df791fbcc3962a539f6daceb1fbe994","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-NxQq2QIHsRbst0IRX4RzwpelUucw0HchK1EOLkvtj75F9FYv4PWNbFJL++93n1VIcczs1OlMhT9u5S9tknsktw==","shasum":"b9b19a7d294e1f94506da4fded949851f4c20cb5","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-5-export-drivers-from-the-top-level-3fbbee098df791fbcc3962a539f6daceb1fbe994.tgz","fileCount":5,"unpackedSize":33928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl7G3CRA9TVsSAnZWagAAU+cP/229Vh9hOSNyM57GjcRz\noHfOuu7fKo5FSsA1TjbYPkbnJDYbFdD0vfx6IVINI9QqEkXv3mWcc+LibiwZ\n+RqdTXjpSuAHycOcnvxz7ebCCNC+EVtHcfJla2vYjrNe5fhFWURJgGZTvCDY\nTE3pp4S0m6BLgA4Tz/8GZyyHOG7Nj+sxwq6EqV9CHnjVrlrkt7ktE15zk1cw\nMeCkpoLlEHEb8i65v9DECjtMqwXb3TN8BAo2qOzZhomxuuF7VCigaNTyQVzx\n+WzpJm/prig4by8UEgwmTCzM3ccOnq1eDTSEk5Zd3oag0TeK1tao1lVM/Lnl\nrHO0ZPL0Wc0VYmFZS/hFuZmySW3vuRAHCzhNlM7uxVyp1FQHe2Po8uepxYeu\n4tKey0J9YX94tlcL4TM39p06GiY3hooGXiYf9i9dlXgTWZqVGeiEAnbD5zPu\nhcVNZWUwNj0M+2KbFfW/zxsUnLFkzuyJGV/8G0cFp9l2fmXTqjqR4XNaj8oN\nxNWxoVdlfSMooINKy66u77ynmtJkdj6JCaDWhBC2s94PdsS8sVMFIj/PoXDK\nsuzg/X7nIKZu+55Sdf4gvWrM+MKPb+rQjMby4R/Yhb5Dwt5V9rCHTjZY/Dzv\nkrLVHEBZMZJ5Vtz7ogwAr0E7h2/FeeropRv+K0IuMHvJVcgRMD4rSNvvPsVR\nB34K\r\n=PDeO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFln1IVLOslEeBw03+eKcpMg0KYjp2TXkrssdhg4OnncAiBQaPT2vcyWX5Ylkb9VlxR4uP5mgx7KX9KZsWTUi3JpZA=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-5-export-drivers-from-the-top-level-3fbbee098df791fbcc3962a539f6daceb1fbe994_1536668086144_0.044810692440478084"},"_hasShrinkwrap":false},"0.1.0-5-export-drivers-from-the-top-level-0714fa0dd21c94cad1f38d99349c92b8ab067bb3":{"name":"molen","version":"0.1.0-5-export-drivers-from-the-top-level-0714fa0dd21c94cad1f38d99349c92b8ab067bb3","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"0714fa0dd21c94cad1f38d99349c92b8ab067bb3","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-5-export-drivers-from-the-top-level-0714fa0dd21c94cad1f38d99349c92b8ab067bb3","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-DKIr72YMAkMlwXQWaN5O1PP3Q8k4Pmls8ACEc+s28zKqC7yZ6ONF38f728EplIk3+1Yu+XQ4OvVNE5jmficeOw==","shasum":"5666e558e060b87061e6a818d4c05691e21bfd4e","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-5-export-drivers-from-the-top-level-0714fa0dd21c94cad1f38d99349c92b8ab067bb3.tgz","fileCount":5,"unpackedSize":34336,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl7RKCRA9TVsSAnZWagAAmzoP/jLUEIsQ7MJqgWEKnLzJ\n8KNIhGjhzVkDkbWBCcqMDD4yKpG3naS4MacWzGbnkV3G0YV7DwdBhURWgwJ5\n6NPPqHs496BD+fQQR75De3NFX/XKmXixlY8iaovfoT0nZG6SOouSPiuQFf9o\nPD5n73iJ3ulfpOhOHqBMvZ46B6KZhyCPk5HUdAhxqpejxG6XrJIlMQnZam92\nSVfzfceF+5j52ybngXSdj7585OXkIXy8053EP+gRRf3EyEEJJLVulo3CjGW4\nPS3Y476gMeZzI9lmC3jbsPBnPolrqf87AYWNzDKltcxIHSy0CCg3HzSJB9Oq\n9wi4rzbu/JBgCqCvcIcvAK0uVroOiZ5irdqQDHYWmwop3DmBn84pZSWoElZL\nNMw5QJpB7uOUg2TCp3ExQpMxutYb9pxgT+er1l0TBU6jgwdqq+TRAv50D+8P\nHWt1nmmP6rKAwycpeuKIHV5ciQ5Aecah829up+loLG31EgGozMw4vU8+J2B3\nfQovY1JuiLbp1RsZQrZ5tM99uURelYMJtVDaTuIc4bo1yjltUQfbxwZesxBH\n3TX5AIRwv6Icl6PMz4hmO2hF4ioUDwSAF7LEwBAjAwxYg07rxlb+kfWzcMBT\nE7g4ryzRBfJOkIDXUZ/ca2IgU0S3Z+rtKaKI0ye4kF8E8XAhAF6giRIDoexR\nNA1V\r\n=gknv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCc9YoPHkP46yVETJnV92LYv+y03FmkSg6y8n/dWNubvwIgUS/bHNw6S/WTNSNZd0MVQsSwXQd9447FzrMcb8KUa0k="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-5-export-drivers-from-the-top-level-0714fa0dd21c94cad1f38d99349c92b8ab067bb3_1536668744841_0.009166932959678409"},"_hasShrinkwrap":false},"0.1.0-5-export-drivers-from-the-top-level-4cd99542eae2c69ac23737c578c71ff03752a231":{"name":"molen","version":"0.1.0-5-export-drivers-from-the-top-level-4cd99542eae2c69ac23737c578c71ff03752a231","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"4cd99542eae2c69ac23737c578c71ff03752a231","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-5-export-drivers-from-the-top-level-4cd99542eae2c69ac23737c578c71ff03752a231","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-tQ9CPEF09kNhGJP5vxqA6IL4VHIDskWvuGHnLIDGSMudNxTIww2yLxIZ9xzVP0NK0ytSQljO+u/KOz8aDN4hrA==","shasum":"129b4f68f2399c763c48ed02a67962e0cab31522","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-5-export-drivers-from-the-top-level-4cd99542eae2c69ac23737c578c71ff03752a231.tgz","fileCount":13,"unpackedSize":43920,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl7WlCRA9TVsSAnZWagAAPfkP/R2JkMpCbcR2Tv4I/uxm\nJNFb0wqKHthByEW2Fs6weMvhqLiI/68ANIDrhVCDufMwCmpu/UE6sp0XpCqj\n+9J6ipymZLGpff3OUhfcqvM85slvzT0+9TuQet/TqMk489ZPkX0L6/VdYFll\nQmcrg9NArjzuN0uTIlbYXdOu8S+eT2rGJRB//jLmScWiIOWOxsUi6crzyslg\nlcf1qb2DXKt3EtNaOhYDs4UJUM+sZqZJCZtoPpuzS5TLXA0hxKCGR/muzneS\nj0DaNzFnFCMP5Uz9zk4/WrG6L4NxUXD0Zvgf1GyGA0EPPpBUWXXu6FVUv11h\n8osd0JGrwS3sP4hRRHr15bPhgAyl0lwucdjy7Y87uFNEnUjf/m6rfrhUYvsr\n+a9HKbArrItROrGaoUOUlr2+Jpqfwlit7rtxjEt7rIk8Y5N8cOs5JhjNUhS5\na5SWAGb+R+fkjmy+nMPoBVZXF+Z851Ymbd3SHzxg9UknD3wosEjDro+X6m0M\nP/rU2wo9mtFcYWrRRkNXDz3tWYO26qqc5soKQ8N34PFM+sXdm7z88gHQT6TX\nZIYib+bsqP2T56G1OJamJ4OUPKBgvIgGnOSOL1fIfFS3964kZXxhzELbON46\ns3fnZUYivGyo1bkpRhYFrNupJW48asX/4MwS+4dTiItJbZKyOmE1xzGzueWK\nj8td\r\n=z/sf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGGbjo/f8UwqbZjwwS2vpqZyeyPNucivVEyAgtIzJZ2lAiEA+r+Kfzdo+XpjvdXDTH1UndIZXV3wHXSokxIk3sKnhTY="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-5-export-drivers-from-the-top-level-4cd99542eae2c69ac23737c578c71ff03752a231_1536669092674_0.9627873664456337"},"_hasShrinkwrap":false},"0.1.0-5-export-drivers-from-the-top-level-ce188e572b7d1aeb651ea250b80a17a3952d9d7b":{"name":"molen","version":"0.1.0-5-export-drivers-from-the-top-level-ce188e572b7d1aeb651ea250b80a17a3952d9d7b","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"ce188e572b7d1aeb651ea250b80a17a3952d9d7b","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-5-export-drivers-from-the-top-level-ce188e572b7d1aeb651ea250b80a17a3952d9d7b","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-XBzFHw20jJueDewLX5TtR3TKYL7JC1fxWhduR+KYACpgGrwSgtO4yD0PjKdNgdmV2cufb0xzvAk4ixSbV1x4jQ==","shasum":"caad2f971e89a88662af6ff3a93f535a69958f3b","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-5-export-drivers-from-the-top-level-ce188e572b7d1aeb651ea250b80a17a3952d9d7b.tgz","fileCount":11,"unpackedSize":43620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl7eBCRA9TVsSAnZWagAAJxcQAIXcbCOxBnhRq5Nw6rP2\nuTPYRWg3ulC1YoL23rk/cFXWM4TwuXunOF6ibnIIMq49O1BcMJsCOiuZq71J\nxouO6LqRvmA32smIwJ3geWugHSOZz273BLYN8smPiUujoRws2YoOD5jlZ90h\niL9rAV8ChGanN+Sh11nLThEbaFoQ0eIhkXGg+RTZJDn6Jk989FAmZ/dw+JX+\n3XEjwdDvTo8BK0/DJUCZnkXe9Tx1q2B5qLjxcU2313EIm8Q2fICg4TfQl6TS\ndT7pvfZi6fsrXdIvu4FMdJRSpKcaJ7EO42WzxshDrw145d83B+1u5nWvq/YJ\nEoCNj7LpmWOcOczsXaqGmXfJXJm0cDs58czbuvi+ie4WIuwwUAqd1iuNAMRt\nAOg7ZJgE/P4R1x2Y/kKofHUG2YubizDuLEBRWiywta+HV5MNKtVwkLVYvVBm\nrWWKYyA738wAG8fq3OUW1r+j8oNK9RfxuuIprKqNKgWEeC6zON1Au3c50V4V\nl7h0ApLGKerGQMVZ7eKGuDhW1XhRaLQD4+x7Qc8aTcbE4qoXwes0v9sp6BZl\nVs3qMwn4tM6d7lOrNMLDwCyP8ZqJwUzrZgjYcShTMIuLp8b4MPS73vqCPsmo\nbZD8yQRQlotxGHqIsa6JBX8BXWRNL7uP/gRJLMLj1XnhuVZPSNCz/bQj0cqr\nE/Ee\r\n=Ii2/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD372YVdKMTy80jc75NEDeHbv9FDGC5Ccq4ENG2pST8BAIgNmhts4A9LRwn6o40VO2J0eBkcw3tmJj88Mb5mZGPuEo="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-5-export-drivers-from-the-top-level-ce188e572b7d1aeb651ea250b80a17a3952d9d7b_1536669568574_0.7861732791568472"},"_hasShrinkwrap":false},"0.1.0-5-export-drivers-from-the-top-level-5ee4748b02e64f8351c5cd39575768a8ebff1c50":{"name":"molen","version":"0.1.0-5-export-drivers-from-the-top-level-5ee4748b02e64f8351c5cd39575768a8ebff1c50","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"5ee4748b02e64f8351c5cd39575768a8ebff1c50","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-5-export-drivers-from-the-top-level-5ee4748b02e64f8351c5cd39575768a8ebff1c50","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-uDYuvq8bkFHs7te59EzLV+5J8pFe6fCSmX6u5ZXQ5W0aQRcy4TAbzeZqPixykXmKSJxWxOxIf7rnuYWg3C+8Eg==","shasum":"90d0aafece57996d7dc33a1068b5977d1a3d0424","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-5-export-drivers-from-the-top-level-5ee4748b02e64f8351c5cd39575768a8ebff1c50.tgz","fileCount":13,"unpackedSize":44001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl7hhCRA9TVsSAnZWagAAc3UQAJjMu1zuyKZnashaU/bd\n+9bGqtwf0XyIbgKjQM1X92kCfwUcdpmBNMaGP0dHep8jXbROF4W2XQkBhTB9\n5CtMp+EQkfDlRjgYpfNR2X5COP/+Xi8ZyCTNwjiLw5hO2cByJUH3sQJm387O\nnoL9OViHj6DNYyzSobf+8yqCBNU4hYvKXMQKuKLgp+Dy55Erd4gYG0cXQCCB\nYZx8QkfA0vWnxnrRzA5u6V0Hc3vAjD1Go/p/6V4SzgCtiGawwCMOTbK6Kgmu\n6VS8FRVJtKy5ZFklqVP1iAxFLaee53XQ24dyTFR4NIlCQioWruvW7eyraKTA\nsEbJWCjwPUi2/WnpI+bXFMZ1/3tOCNA/fuepNWzoO5t1vlDdT+zHIh9/vZfz\nXFy6K0Ko0/F7S6t5kkUUfetgRtmqgMNFjDvXzKfQWXdRzBwv2NdA/foauHLl\n9izxzpcL9PxUxjHHTxGBNdSlxp13GzSq7WfPlfc4HHEA3+YMWHCq9O+nEkTM\n8VA7/yuoP6PzgtyM45asCYZ5j0NjFVZEH/vHJqNA0nHp91q6FS+9UWp14wpF\ndt0Yk7hfuzOTTmS72GGaOa2jwMvY71gsmInSsqNGF/HkMvHobDojofwTZSd4\nbMddvILtDXVuBrhutYFOs1aAYnPKrOURdiIlFt1y3gaZktJfVjIS8o02xK5h\n8EDn\r\n=CgWm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGOLl6CnInNbMloldtEqUjIU/B3AXjtQT87ZlfBxln1AiASfaG8oUJva1XqPiI7iaQKDwW9vm+f5xp/Za7H+OM9qw=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-5-export-drivers-from-the-top-level-5ee4748b02e64f8351c5cd39575768a8ebff1c50_1536669789216_0.7676210877162941"},"_hasShrinkwrap":false},"0.1.0-master-59ea9578c5117c642a2b65861b29f39d671a03bb":{"name":"molen","version":"0.1.0-master-59ea9578c5117c642a2b65861b29f39d671a03bb","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"59ea9578c5117c642a2b65861b29f39d671a03bb","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nThis document lists some of the ideas guiding its current development. They are not final; input is very much welcomed. Furthermore, the project might go nowhere after some experimentation, in which case it might just sit here waiting to be discovered by a dead-repo-archaeolist. Hi there!\n\n# Design goals\n\nThe main goal of this project is to make the advantages of Observables and Functional and Reactive Programming shine. Ultimately, the primary use case should be where the benefits of using FRP outweigh its downsides.\n\n## Easy async\n\nThere are a lot of tasks that involve asynchronicity: database queries, API requests, timeouts, etc. By embracing the power of the Observable, asynchronous programming is first-class.\n\n## Prevent bugs\n\nBy eschewing side-effects and preferring [pure functions](https://en.wikipedia.org/wiki/Pure_function), we both ensure that code is easy to test (compare the output for a given input), and that it is easy to follow (the effect of code changes is local to those changes). Thus, a developer using Molen should preferably be outputting descriptions of the side-effects they want to perform, deferring the heavy lifting of executing those side effects to external libraries.\n\n## Let types do the work\n\nIn Molen, developers write functions that each perform a small step of transforming a given input to the desired output. This style of programming is greatly aided by static types. Thus, although Molen can be used from Javascript, it strongly encourages the use of TypeScript using strict mode, and does no extra effort to compensate when developers break assumptions made explicit through static typing. In other words: if a function parameter in Molen is of type `string`, it will not do a check whether the developer passed in `undefined` - after all, TypeScript could have told them not to do that.\n\n## Experiment rapidly, but safely\n\nMolen is an experiment with ideas that are mostly new to me and, as far as I can see, the Javascript community. Being able to iterate rapidly is therefore crucial, in order to judge whether an idea is good or not in as early a stage as possible.\n\nIt is built on the idea that rapid experimentation is most likely to happen when it is safe to do so. Adherance to semantic versioning, automated unstable releases and automated testing all contribute to safe experimentation, and are therefore important tenets of Molen development.\n\n# Accepted trade-offs\n\n## Learning curve\n\nAn important disadvantage of Observables and FRP is that the learning-curve is quite high, at least in a world in which most developers have not learned them as their first paradigm (also know as the Real World). This is a shame, and while it's important to recognise and cater for these difficulties, the use of FRP is the raison d'être of this library and thus, that will not change.\n\n## Compatibility with Express middleware\n\nAlthough it would be great to support all existing Express/Koa middleware, given that they are free to perform side-effects any moment they like, I currently do not see a way to make this work while respecting Molen's design goals. If someone manages to make it work, a Merge Request would be great; but if not, the design goals are more important.\n\n# Non-goals\n\n- Molen is not meant to promote a specific FRP library. At the time of writing, it uses [RxJS](http://reactivex.io/rxjs) because it appears to be most widely-used and fits the project goals well.\n\n# Acknowledgements\n\n- [Redux](https://redux.js.org/), the first project showing me the true power of pure functions.\n- [Cycle.js](https://cycle.js.org/), which demonstrated how a well-designed framework can help using and understanding the benefits of Functional and Reactive Programming.\n- [Warp](https://seanmonstar.com/post/176530511587/warp), which showed how types and functional operators can combine to form a powerful pipeline transforming back-end input into output.","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#README","_id":"molen@0.1.0-master-59ea9578c5117c642a2b65861b29f39d671a03bb","_npmVersion":"5.6.0","_nodeVersion":"8.11.4","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-Ur3IZRhy0yhBU09mhq2bCGDlEhyW6kQqPk0RfVuzVdJbiSZf50XotBmWIPLQzOs2GU4PCqj72QOIER1RbGbFDA==","shasum":"f7e9f79d07a447a3a937f8d690c1c974e20771ef","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-59ea9578c5117c642a2b65861b29f39d671a03bb.tgz","fileCount":13,"unpackedSize":43972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl7n8CRA9TVsSAnZWagAAgAMP/i/obyi5p51Cy0eXaJka\nYVgZeEevH4wUp7k+e9i+abPvH1yQFqTxl/VYa08Uy6XEpx7+2E4MhcoV4c6r\nFcjBQWDwVIsRsdT4lG9MR+EGhzkha5fQft6ecLI9CRm+acy72GoIqBanhdEv\nwCGatTR3N/yFezWCblA/2IZjstWFigB9MWW6d7Aeh5MS/RJiu2vgtETpZ0g3\n9bk47DCTAXR1y/IKABAXDXcAeCaYuDk87As8jCkGzmzNLcc4GlRHd83BAlWR\nABrjJguHL9zgKa7a2lBkdOEiShsB/4avYK6a57NWr69ezuJbFngXaQavJfAJ\nPhkROuem66yBThTQHXTeNmWhU3lMe7w0fDam3SDjBNl2cccCgY07N1i4IlLH\n84nL8/ZNla6784u4VhtQc6zpl1TByfwhINK1oneQLsQb+PezFKDBVZw/A6cx\nxRMHDleehitZR+WgAT93mYsu28qvj6zB1C9Bc3yZeA3G/xc7YRgsgnhElMtS\nog/eu5TJpu968NekDJhw9c2+E7ORwAZAeJAJVOlxaif2AW+T2fzR1U4sQs8K\n17rc2qWZPinHGwNkvxE4vSYCv4lq9eEDeH8frwRKAq7RbuFiHhMXJBoxh/Kk\nbTGCwQkL9QwQig1J16cbaKXdDR+ezYbqp3ECLSK8q0PnVlcHI82b3d1mELIm\n+KP1\r\n=jd2x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCws8WKt3/aJ4IiyLVn5zgpMfmx3dio3MurB4m+HE34NAIhAKlSlIXHZrI57R1QLhJwTcWf4xYjk0BSxImenryYdEN4"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-59ea9578c5117c642a2b65861b29f39d671a03bb_1536670203724_0.4158284363468623"},"_hasShrinkwrap":false},"0.1.0-master-a4cf4506c5173d8a635b99b093540a8fb27b4201":{"name":"molen","version":"0.1.0-master-a4cf4506c5173d8a635b99b093540a8fb27b4201","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"a4cf4506c5173d8a635b99b093540a8fb27b4201","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nPlease take note that this is still highly experimental, and the API is unlikely to be perfect (and hence likely to change).\n\n# Why Molen\n\nMolen is built around the idea that asynchronous back-ends can benefit greatly from the Observable paradigm. (Also see [the design principles](./DESIGN.md).)\n\nIn a nutshell:\n\n- Observables cleanly represent asynchronicity.\n- Contain side effects to prevent bugs and aid unit tests.\n- Written in TypeScript to help your editor help you.\n\n# Getting started\n\nInstall Molen:\n\n    npm install molen\n\nUnfortunately there is no extensive documentation on how to get started yet, because the API is not yet final. However, do check out [the example project](https://github.com/Vinnl/molen-example-event-sourcing) for basic usage.\n\n# Examples\n\nFor more examples, see [the example project](https://github.com/Vinnl/molen-example-event-sourcing) and [the examples/ directory](./examples/).\n\n## A simple HTTP server\n\n```typescript\nimport * as Http from 'molen/drivers/http';\nimport { map } from 'rxjs/operators';\n\nconst app: Http.HttpHandler = (input$) => {\n  return input$.pipe(\n    map(() => ({ body: 'Hello, world!' })),\n  );\n};\n\nHttp.driver(app, { port: 3000 });\n```\n\n## An AWS Lambda function\n\n```typescript\nimport * as AwsLambda from 'molen/drivers/awsLambda';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst lambdaFunction: AwsLambda.AwsLambdaHandler<Input, string> = (input$) => {\n  return input$.pipe(\n    map((input) => 'Hello, world!'),\n  );\n}\n\nexport const handler = AwsLambda.driver(lambdaFunction);\n```\n\n## A WebSocket server\n\n```typescript\nimport * as WebSocket from 'molen/drivers/websocket';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst echoApp: WebSocket.WebSocketHandler = (input$) => {\n  return input$.pipe(\n    map((input) => `Hello, you said: ${input.data.toString().toUpperCase()}`),\n  );\n}\n\nWebSocket.driver(echoApp, { port: 3000 });\n```\n\n# Recent changes\n\nSee the [Changelog](./CHANGELOG.md).\n\n# Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n# Licence\n\nMolen is licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.0-master-a4cf4506c5173d8a635b99b093540a8fb27b4201","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-jmnCDAVlJ9jZ8RgsFHy9kuNyY5U0SrfZPnYW6QW+WItnsqkakgKXN3z6DaQw+rbHdLvm7awnMSDuiun/xYV96A==","shasum":"29e527474a56bfdadf535680f6b405b2cba67814","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-a4cf4506c5173d8a635b99b093540a8fb27b4201.tgz","fileCount":16,"unpackedSize":46812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmnsVCRA9TVsSAnZWagAAjYAP/3VR3wmvYb4qSDHwGYjV\nta+gXClXpPsB2ab+n5A28+JjM61TU4l2+0MHs4ivK+EZV6Y6oJE8HCKjppZR\nKqD2lA3JSJ9dnmMy8BA55s7XJ9zO934MrhOllC/1r8bXKs5NiAcYFanL2fY8\nKLwJAUuSqannhJsN8FZaZCK2FvncBpIeJ6UYwM9y8jd0XdBDpmRu28zANZfd\nviXRWBaCMbQyaO6wzTlJD1rNseaEp+8Zthxz7k8y3Ez7Sv+R96XujJXWGb2T\n6hpj05Xd5tXSDbiEKifsGnUKNk2bk7vFpOXQO5AcDeV1gtv0mEkNQgiVk6lf\nclGlJ/6N9oI4nJ0frNdBs7dg6t5mL4ML8qT/j2GBLuTDSa7OZxa87aq30tpj\n4o00LrmSSMyWc2xCZyDq0HzskFqfP6RWT4PFOR+xLSEo9RWzqL7xFfLHz4h6\nliMAKcio+BgMfZH7eBpMIJRBNFy6ZicUQQ2GjEXM7Xbp25aS+HoBISdsn6SC\ntmJsbP71Q7ohRJqAm6uy1OfnQOd0oLMzCUqK57+MUJa6ZhTk549DEWLacTsr\n+w6Vcjxz7bEKUO/d+1PIQKeqBofs3nCC/9CFMZ0F64z2DQIZSX36lj+s1NMN\n6ebDTPWKPC06S8aKSelVaug8zk/M4x/VpNOUFr4zJ3tMMyjxh4jHrlZYpsZS\ntvVr\r\n=E7Vs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhgTUEtzyQlllZWYFOKzGsp+J0RsHv0NO5daGNWv35dgIgeisDeIS4f2Q+mj7CxVnU3H3jloBtO1MtzNoxbahpU7E="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-a4cf4506c5173d8a635b99b093540a8fb27b4201_1536850708747_0.18846906211441294"},"_hasShrinkwrap":false},"0.1.0-master-82972f25f83f2121c9b0099fa1fa5220554fa96c":{"name":"molen","version":"0.1.0-master-82972f25f83f2121c9b0099fa1fa5220554fa96c","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"82972f25f83f2121c9b0099fa1fa5220554fa96c","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nPlease take note that this is still highly experimental, and the API is unlikely to be perfect (and hence likely to change).\n\n# Why Molen\n\nMolen is built around the idea that asynchronous back-ends can benefit greatly from the Observable paradigm. (Also see [the design principles](./DESIGN.md).)\n\nIn a nutshell:\n\n- Observables cleanly represent asynchronicity.\n- Contain side effects to prevent bugs and aid unit tests.\n- Written in TypeScript to help your editor help you.\n\n# Getting started\n\nInstall Molen:\n\n    npm install molen\n\nUnfortunately there is no extensive documentation on how to get started yet, because the API is not yet final. However, do check out [the example project](https://github.com/Vinnl/molen-example-event-sourcing) for basic usage.\n\n# Examples\n\nFor more examples, see [the example project](https://github.com/Vinnl/molen-example-event-sourcing) and [the examples/ directory](./examples/).\n\n## A simple HTTP server\n\n```typescript\nimport * as Http from 'molen/drivers/http';\nimport { map } from 'rxjs/operators';\n\nconst app: Http.HttpHandler = (input$) => {\n  return input$.pipe(\n    map(() => ({ body: 'Hello, world!' })),\n  );\n};\n\nHttp.driver(app, { port: 3000 });\n```\n\n## An AWS Lambda function\n\n```typescript\nimport * as AwsLambda from 'molen/drivers/awsLambda';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst lambdaFunction: AwsLambda.AwsLambdaHandler<Input, string> = (input$) => {\n  return input$.pipe(\n    map((input) => 'Hello, world!'),\n  );\n}\n\nexport const handler = AwsLambda.driver(lambdaFunction);\n```\n\n## A WebSocket server\n\n```typescript\nimport * as WebSocket from 'molen/drivers/websocket';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst echoApp: WebSocket.WebSocketHandler = (input$) => {\n  return input$.pipe(\n    map((input) => `Hello, you said: ${input.data.toString().toUpperCase()}`),\n  );\n}\n\nWebSocket.driver(echoApp, { port: 3000 });\n```\n\n# Recent changes\n\nSee the [Changelog](./CHANGELOG.md).\n\n# Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n# Licence\n\nMolen is licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.0-master-82972f25f83f2121c9b0099fa1fa5220554fa96c","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-yTVl/Voh3eQI1+YzgKQBbdglv8n1uzu+Lq5hsYmLUjMY6XPB/C+ej9x7kfSzInBkBDyRvDAk80As/B3U+2caKw==","shasum":"fa2dd365d9ae5a30566e70c45cf7d3c675272a64","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-82972f25f83f2121c9b0099fa1fa5220554fa96c.tgz","fileCount":16,"unpackedSize":47238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmny/CRA9TVsSAnZWagAAJuEP/jLEYJxSKGvBhgeydlly\nRY4L7yRwfJEN5gRYQdMVxSgfaHMoyQmUgQqu8vZchYNMS9dm1o4Cz+EyRhJI\nSgVbpG33A7//2G3QgLXAJSLGZeHYdEFolfJkh05Xcuq4H8BGaNVWc9YeDFQh\nx6ePWlNIHOW+xAZIAKfDg+nD+V4mpQZaYX0x+qoFgIUZfd0zveVKeA9EU3RH\nuHbbmbGdRZZvNGJgfPj7IDqg1IxKDn65kz2SUPYsLHLm2jqDNkfUgig+grjA\nKrHFGvBo+Ooq536CHRUMIbmsUHnw4LyEPP89yAgfn8psPx5KKysEfJbMYf6f\n/zOZeINI7FetiEl4g3R+Ero5zvb3yu02IjZxlZjc+hKrBjU0VlWCPULmaV6m\n6XSwXnXIJx/NXxbCaD4MnABZM4c4wIGrjShZJpvK2rC+HaWaSokpBfo+U+5+\nKD9ddjuc7OcVsx1zkBGroBMizz6YKByXzH3b/1lHE6dWjxTi7uFS/p3QdPFD\ntyVUNTwTZFqCwsnlZW/QPIKW8GyGuvvAzs2zTCM2uwzpIHpujxgnL6dZgGKL\n9czrR4cW5NIqKLoqUaqu7hV/Hd478j4S28foMYusHWCvNfBrNniC3753qMZA\nPLHPogHnj3a8kaBpR0yKcxzlZqQwiiuOKmKBREYQVOwofMrwwGqrUeso0c3Y\naDAz\r\n=Maay\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkb9GXwc7GzUL6uF08s7aT9b5Atd+DDGQJAzQh4BpHsAIhAKiNISmcnZqcF+BjMUvGihD6dZNk3CtlnG0tgSODHP1B"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-82972f25f83f2121c9b0099fa1fa5220554fa96c_1536851134602_0.8249185304492765"},"_hasShrinkwrap":false},"0.1.0":{"name":"molen","version":"0.1.0","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"82972f25f83f2121c9b0099fa1fa5220554fa96c","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-IJDlJA49lbxAOnhkOe8Vb3a3FQQzxpzLUkNwIQELf9Ac4Yk2m+UTTWBRsfxAWLQQxAOARL8PlfohypEat1LDyg==","shasum":"287acc767f04b969f83192224c3e22af5ca93a86","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0.tgz","fileCount":16,"unpackedSize":47190,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmn7mCRA9TVsSAnZWagAAjSEP+gJojIcqjrpBcEGzCBKq\n+Q0vLyGo4sTFHWRgrdosJ4W3JhaFfz6N7LcyDHJ9TKo6IVvnQO2tDmOzQesR\n8LVt5EJVta4Hi5UGx+teAPDs3ajLRNE9Cb7BtlODUJLjBiDRK08zJLAlfMbY\ny1E4U5BHqH/j+DVbfJY7nbB/55I/tNmVKEd/BkJAN7J/bL10zhpuJN7BKE4f\nZTtMdZy4NgzkG5e4zJ0TuXLCu8c5MtCo0B34kjK4g2JnJW7zErxQF1SIn755\nXFo5l+juxSprCeShhQqG5JtMlAJA8rFghSr3Pa7wS8WcyFaI1XkJqRLd0DlV\n2YRlDboN3vjYhZIG0ullbALofB5RFqUsnNQ6aWDe01qqTQVR69B8o+f4OxyX\n2flxH8rCsbQ33Fh+eqruvU93QKZZQDwZr2+saICcmF2pbqPahZqWtQk6VROJ\n7JPAVMyqRdLLDj0loG5wCua2DEI4EYMGbspkdkWu6/hzF5vgdUud7aki89Pi\nmaex7fB5EdTyUPg3Z071ca8QRa6mjuSLTFur6gYMkU4IyjpF44UPP2GxGo0h\nfXm6AShM13VKSJwpzjgquW6i8pEGw+14EP6Hlwe24Xrs2g7uqwku3twl5q3R\ng03/o+lTvFFB8Km0CXPtnkZR7uztKxp3Hq3DP3win6781hLMd7W6dUmj2996\nmUg7\r\n=nfwu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGviIx6D296NoRBgb75kZjTiajgBlSTUpsmpEjDzz/60AiEAt5gfqBzyb4ZKUwlXC0zdPjvlwTux0Aq/I38xi3Zre0M="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0_1536851686209_0.747947433867082"},"_hasShrinkwrap":false,"deprecated":"Molen was an experiment that has since been ended, and this package is no longer being developed."},"0.1.0-master-59487994ae5f667fd426ae8d4a4ddc7dc168f515":{"name":"molen","version":"0.1.0-master-59487994ae5f667fd426ae8d4a4ddc7dc168f515","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"59487994ae5f667fd426ae8d4a4ddc7dc168f515","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nPlease take note that this is still highly experimental, and the API is unlikely to be perfect (and hence likely to change).\n\n# Why Molen\n\nMolen is built around the idea that asynchronous back-ends can benefit greatly from the Observable paradigm. (Also see [the design principles](https://gitlab.com/Vinnl/Molen/blob/master/DESIGN.md).)\n\nIn a nutshell:\n\n- Observables cleanly represent asynchronicity.\n- Contain side effects to prevent bugs and aid unit tests.\n- Written in TypeScript to help your editor help you.\n\n# Getting started\n\nInstall Molen:\n\n    npm install molen\n\nUnfortunately there is no extensive documentation on how to get started yet, because the API is not yet final. However, do check out [the example project](https://github.com/Vinnl/molen-example-event-sourcing) for basic usage.\n\n# Examples\n\nFor more examples, see [the example project](https://github.com/Vinnl/molen-example-event-sourcing) and [the examples/ directory](https://gitlab.com/Vinnl/Molen/tree/master/examples).\n\n## A simple HTTP server\n\n```typescript\nimport * as Http from 'molen/drivers/http';\nimport { map } from 'rxjs/operators';\n\nconst app: Http.HttpHandler = (input$) => {\n  return input$.pipe(\n    map(() => ({ body: 'Hello, world!' })),\n  );\n};\n\nHttp.driver(app, { port: 3000 });\n```\n\n## An AWS Lambda function\n\n```typescript\nimport * as AwsLambda from 'molen/drivers/awsLambda';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst lambdaFunction: AwsLambda.AwsLambdaHandler<Input, string> = (input$) => {\n  return input$.pipe(\n    map((input) => 'Hello, world!'),\n  );\n}\n\nexport const handler = AwsLambda.driver(lambdaFunction);\n```\n\n## A WebSocket server\n\n```typescript\nimport * as WebSocket from 'molen/drivers/websocket';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst echoApp: WebSocket.WebSocketHandler = (input$) => {\n  return input$.pipe(\n    map((input) => `Hello, you said: ${input.data.toString().toUpperCase()}`),\n  );\n}\n\nWebSocket.driver(echoApp, { port: 3000 });\n```\n\n# Recent changes\n\nSee the [Changelog](https://gitlab.com/Vinnl/Molen/blob/master/CHANGELOG.md).\n\n# Contributing\n\nSee [CONTRIBUTING.md](https://gitlab.com/Vinnl/Molen/blob/master/CONTRIBUTING.md).\n\n# Licence\n\nMolen is licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.0-master-59487994ae5f667fd426ae8d4a4ddc7dc168f515","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-05LE9pvkEjgqKa3vJWCjUZaqdghasxOvmmqMw0NPBltk3PWHxQXCMl4j0WRmHu+MCbT2yN8R4GbOAZIeoxh9yg==","shasum":"ce71a78512353570a8c8f96e67f5132e30c1dc67","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-59487994ae5f667fd426ae8d4a4ddc7dc168f515.tgz","fileCount":16,"unpackedSize":47442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmoJTCRA9TVsSAnZWagAAZBYP/3rgvAOwzRw9FwweA7sF\nE4fEfVO8Ls4OCb4+MNG/JJPPeAJmD2Bhk7CxS46fCAkL8QhRxjbJMX4ih8G5\nOdQ6EikxvYMxgKfSN/ZLstm/I22h3MaGNq+GLSVvvm1/XT/1hi3LcK/CYwQi\nHehiWQlZKEtakhMrWGGlEmwyqCp39hmQyF1cxDh9nLDfZbj23fMfduosN5jd\nyHs9noHxWNKI4vVGpKDWW8OnL0AX8rF4cCAg1XkH2najcg072CQk2wszGQEM\nVbeUshR7ORUmczhCYDR1oO6jZfe2xnC9rFyzqkfsOe+RH9y1e45IOQKm/KDU\nOt4pvo67+pCto0WMvXB51TAOTgoqkGYTAPllupBnqzJZ9l3jctgRoje8WscF\nNlZMsUAqejDNlYzuIRqlbE0LWU4afV+cHsSeEKTlsy6hpnxUrqkbpTEvUlbD\nFowVsyvtCA+MbMcm8UXogPbsrBSADL+uJOs+Pcc07hqAgmIzCPum5DqtFT0w\no7+X19ykLRGf9+Y/H8TOJMoFxrbm6xwC5g9tXrtXnxySdZXJs6gYo9DcjVDO\nWol8iKZiDOSOpKof/v13nkj+tF/T8V9ZyrFclt5y7y70cmTihPZcIK9GncBq\nkHlz7bYm34T0PFz4PqOT3HnaIroV2n/oLYaKSHc5Ys1vfhGiFw0dHAuEw4to\n6iFk\r\n=Lxi+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEEege/+jzVDm8AnDcQzvMZ9/zMWlZalXJoVGmampg9hAiA5sB/nea115yy9VekAHXfdm5P2owI22KyrghtdciuWpg=="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-59487994ae5f667fd426ae8d4a4ddc7dc168f515_1536852562740_0.5098001785967832"},"_hasShrinkwrap":false},"0.1.0-master-2e3b3a563cc1ccb2284c715408dce59de6edb4c5":{"name":"molen","version":"0.1.0-master-2e3b3a563cc1ccb2284c715408dce59de6edb4c5","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"2e3b3a563cc1ccb2284c715408dce59de6edb4c5","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nPlease take note that this is still highly experimental, and the API is unlikely to be perfect (and hence likely to change).\n\n# Why Molen\n\nMolen is built around the idea that asynchronicity plays a large role in many back-ends, and that many common operations can benefit from the reactive paradigm. For example, reactive operators can make it trivial to [limit the amount of requests](https://rxjs-dev.firebaseapp.com/api/operators/debounceTime), [time-out operations that take too long](https://rxjs-dev.firebaseapp.com/api/operators/race), [retry failed actions](https://rxjs-dev.firebaseapp.com/api/operators/retry), [throttle requests](https://rxjs-dev.firebaseapp.com/api/operators/throttleTime), etc.\n\nFurthermore, Molen aims to minimise the programmer's cognitive load and thus reduce the number of bugs. The two main tools to achieve this are by [encouraging programming without side effects](https://vincenttunru.com/The-case-for-Functional-Reactive-Programming/), and by [being written in TypeScript](https://staltz.com/all-js-libraries-should-be-authored-in-typescript.html).\n\nFor more information, take a look at [the design principles](https://gitlab.com/Vinnl/Molen/blob/master/DESIGN.md).\n\n# Getting started\n\nInstall Molen:\n\n    npm install molen\n\nUnfortunately there is no extensive documentation on how to get started yet, because the API is not yet final. However, do check out [the example project](https://github.com/Vinnl/molen-example-event-sourcing) for basic usage.\n\n# Examples\n\nFor more examples, see [the example project](https://github.com/Vinnl/molen-example-event-sourcing) and [the examples/ directory](https://gitlab.com/Vinnl/Molen/tree/master/examples).\n\n## A simple HTTP server\n\n```typescript\nimport * as Http from 'molen/drivers/http';\nimport { map } from 'rxjs/operators';\n\nconst app: Http.HttpHandler = (input$) => {\n  return input$.pipe(\n    map(() => ({ body: 'Hello, world!' })),\n  );\n};\n\nHttp.driver(app, { port: 3000 });\n```\n\n## An AWS Lambda function\n\n```typescript\nimport * as AwsLambda from 'molen/drivers/awsLambda';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst lambdaFunction: AwsLambda.AwsLambdaHandler<Input, string> = (input$) => {\n  return input$.pipe(\n    map((input) => 'Hello, world!'),\n  );\n}\n\nexport const handler = AwsLambda.driver(lambdaFunction);\n```\n\n## A WebSocket server\n\n```typescript\nimport * as WebSocket from 'molen/drivers/websocket';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst echoApp: WebSocket.WebSocketHandler = (input$) => {\n  return input$.pipe(\n    map((input) => `Hello, you said: ${input.data.toString().toUpperCase()}`),\n  );\n}\n\nWebSocket.driver(echoApp, { port: 3000 });\n```\n\n# Recent changes\n\nSee the [Changelog](https://gitlab.com/Vinnl/Molen/blob/master/CHANGELOG.md).\n\n# Contributing\n\nSee [CONTRIBUTING.md](https://gitlab.com/Vinnl/Molen/blob/master/CONTRIBUTING.md).\n\n# Licence\n\nMolen is licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.0-master-2e3b3a563cc1ccb2284c715408dce59de6edb4c5","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-XvBIRckl2TARsc6CQAr9n8kTUGo4h8VZhDGuGL02wGtcAyM3aTvUI5xkphKxafkr/e2mn+BqSFmT6KqNF7+xDw==","shasum":"a16a30b223fb48bfe3ebb1a94a79e0798132c309","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.0-master-2e3b3a563cc1ccb2284c715408dce59de6edb4c5.tgz","fileCount":16,"unpackedSize":48131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboOtgCRA9TVsSAnZWagAAnRQP/3MESSudcAEbQFd4XDTG\n9Ur8Vgxi0KqgB26g6ZrVfIlofGvgll1+/usg1k+fppXQz8U9ng+/uDWo9We1\n9W0l1YOOZ10/xSFb1ug4U0SRfugy1jVdwSEgnwreIzxnY+mauwtKshsVCTIR\nLkMNUwsp8MxDFytMDxfw0iFmtgP5CdimsSy+zZWc8NaRTA3OqUBVNNLfmjHQ\n4Bgq6VweeLH61t5LOtsrGP4qhb2+O9tie4KDbzTkAtd0qZZO8j85/yMCe8e2\nkGW1OpVqSfXe8hSBHLxqdbcpyGSo8SPqQXotWmIzY9QnSJCPPd0zG895yeyX\n4g8H2/RUB0VgcyakcXlgK1LVSauE+VcRKk2l0FKJeql8wK2Gl2zj/PqeHYHu\nV5dYFLKpSXUMEkvnxNw8f7Tm9KINkmPrx0+WtRojcZ2IN+fc57lXWDJiRBCT\nR3+PcWFlysIt020gzYgMCKB3PtOwT45/snxKBAkg3eSUBH405n/6h4Gyqxsf\nHer9e5RnCfC2ngwOkfAyGO7hoyagfeHBDRfwReoHoyx4qE4a723VoOZRsGu8\nBqsXqpuIHlMGDLsZ5XVsT2hzgBcikDW96No8USaZvAQquiGGyolGx7KfSkAV\ng8Qxt2iGAc0RYhaP83fMuB7ReqUx921WWN12nRhtQXUcwIaq9XrFq7YEPLu2\n8amZ\r\n=WDZu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFTOrz9tdOj1qzx3GEs1e2kW+9krluaEjPqqx24fEchgAiEAv/RFgFjZcGsLK4pjit82ewT00QObqp3Yg199xA9/XMo="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.0-master-2e3b3a563cc1ccb2284c715408dce59de6edb4c5_1537272672011_0.2844852043180053"},"_hasShrinkwrap":false},"0.1.1-master-95473ba6747af4501fb7263c5936d0b1adfc9a96":{"name":"molen","version":"0.1.1-master-95473ba6747af4501fb7263c5936d0b1adfc9a96","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"95473ba6747af4501fb7263c5936d0b1adfc9a96","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nPlease take note that this is still highly experimental, and the API is unlikely to be perfect (and hence likely to change).\n\n# Why Molen\n\nMolen is built around the idea that asynchronicity plays a large role in many back-ends, and that many common operations can benefit from the reactive paradigm. For example, reactive operators can make it trivial to [limit the amount of requests](https://rxjs-dev.firebaseapp.com/api/operators/debounceTime), [time-out operations that take too long](https://rxjs-dev.firebaseapp.com/api/operators/race), [retry failed actions](https://rxjs-dev.firebaseapp.com/api/operators/retry), [throttle requests](https://rxjs-dev.firebaseapp.com/api/operators/throttleTime), etc.\n\nFurthermore, Molen aims to minimise the programmer's cognitive load and thus reduce the number of bugs. The two main tools to achieve this are by [encouraging programming without side effects](https://vincenttunru.com/The-case-for-Functional-Reactive-Programming/), and by [being written in TypeScript](https://staltz.com/all-js-libraries-should-be-authored-in-typescript.html).\n\nFor more information, take a look at [the design principles](https://gitlab.com/Vinnl/Molen/blob/master/DESIGN.md).\n\n# Getting started\n\nInstall Molen:\n\n    npm install molen\n\nUnfortunately there is no extensive documentation on how to get started yet, because the API is not yet final. However, do check out [the example project](https://github.com/Vinnl/molen-example-event-sourcing) for basic usage.\n\n# Examples\n\nFor more examples, see [the example project](https://github.com/Vinnl/molen-example-event-sourcing) and [the examples/ directory](https://gitlab.com/Vinnl/Molen/tree/master/examples).\n\n## A simple HTTP server\n\n```typescript\nimport * as Http from 'molen/drivers/http';\nimport { map } from 'rxjs/operators';\n\nconst app: Http.HttpHandler = (input$) => {\n  return input$.pipe(\n    map(() => ({ body: 'Hello, world!' })),\n  );\n};\n\nHttp.driver(app, { port: 3000 });\n```\n\n## An AWS Lambda function\n\n```typescript\nimport * as AwsLambda from 'molen/drivers/awsLambda';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst lambdaFunction: AwsLambda.AwsLambdaHandler<Input, string> = (input$) => {\n  return input$.pipe(\n    map((input) => 'Hello, world!'),\n  );\n}\n\nexport const handler = AwsLambda.driver(lambdaFunction);\n```\n\n## A WebSocket server\n\n```typescript\nimport * as WebSocket from 'molen/drivers/websocket';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst echoApp: WebSocket.WebSocketHandler = (input$) => {\n  return input$.pipe(\n    map((input) => `Hello, you said: ${input.data.toString().toUpperCase()}`),\n  );\n}\n\nWebSocket.driver(echoApp, { port: 3000 });\n```\n\n# Recent changes\n\nSee the [Changelog](https://gitlab.com/Vinnl/Molen/blob/master/CHANGELOG.md).\n\n# Contributing\n\nSee [CONTRIBUTING.md](https://gitlab.com/Vinnl/Molen/blob/master/CONTRIBUTING.md).\n\n# Licence\n\nMolen is licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.1-master-95473ba6747af4501fb7263c5936d0b1adfc9a96","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-hp8N7P7pRdtxhiPVCX84zrgOV8sTrNs64QyLv5pjxGp6Xa1KBkAv67MMYdHDBu6saz486G+h9aErS6MuSyTUDA==","shasum":"1f6423037c26f493915b6111ae8d35407ad9ea16","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.1-master-95473ba6747af4501fb7263c5936d0b1adfc9a96.tgz","fileCount":16,"unpackedSize":48256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboOwBCRA9TVsSAnZWagAAHHoP/iJZuJ65kWXZkjcndkZ3\nQ0yenRyRMRykfr/04whigCh6ZVGClf69zGAoRxGSuYUgiiMiNN3XbXmwFw7G\nVTmqxHvPVV4u19mP7CtYBx2SDl1C85wOwzUOTMqrKDY9xz3pO0a0tahPmQyx\nT7bReBEaxtak+6a2e4BOemzZ/tEKvvT92V1UVC28U/wAiWFLFvS6RM7UOHug\nb6UiwWSXqqY1OClaYH16rrIREBVnxw6PMAErV+/VxJumPsVx49pX736Xscxe\nCsdXXJ5yjkigD0X4Rt3vRiWMB3HYsSAmLygzj4+Te0hcKhMC7utMAyXGQpf9\nRgPOOHL9LPwyPIEwGhtfwzlXGhGVNYeLz5aeYDgo2Lpvmz9Oo2yfcOMyJAgs\nbKvKYd7f01xR/uoGr84noKD7Qg8jU3grgpyVn30QNDtxRPsxxLHOBD0hNzFr\nMgB+4B1+oPQq3pZ9HQMN7Pm5oYhfcekt3p652GqzmaPJaYs28NwXzKQL5koI\nwceK4FPZ+9GdoVA9cKEbPe43gfkEr5/7l64K65WYn/IroznGTW7Ot0ksd7P2\n9aUw4X/Hu9Npps6iPxlTl2FQeejVlO0pQWcbY1s2MYSswf78uejTtB6NHmCj\nRaXo0BmBRgi09ZVueSzKmKeGlU0CEJzWWrCQ3sr/Vm3jaS4Wa7c0kT/X36G9\nUl2a\r\n=fx08\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB3+dtkMNxvRoh4JpPpv3LESJKp8s5u32xdc9XsCdqPGAiEA5m4O1YJJIDMtUkejs0OC2JWaKc/vW7tiP1gf03EtZLA="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.1-master-95473ba6747af4501fb7263c5936d0b1adfc9a96_1537272832756_0.6223959166294244"},"_hasShrinkwrap":false},"0.1.1-master-713cf854d2b550ed23288621166da6d8a7fca2d1":{"name":"molen","version":"0.1.1-master-713cf854d2b550ed23288621166da6d8a7fca2d1","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"713cf854d2b550ed23288621166da6d8a7fca2d1","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nPlease take note that this is still highly experimental, and the API is unlikely to be perfect (and hence likely to change).\n\n# Why Molen\n\nMolen is built around the idea that asynchronicity plays a large role in many back-ends, and that many common operations can benefit from the reactive paradigm. For example, reactive operators can make it trivial to [limit the amount of requests](https://rxjs-dev.firebaseapp.com/api/operators/debounceTime), [time-out operations that take too long](https://rxjs-dev.firebaseapp.com/api/operators/race), [retry failed actions](https://rxjs-dev.firebaseapp.com/api/operators/retry), [throttle requests](https://rxjs-dev.firebaseapp.com/api/operators/throttleTime), etc.\n\nFurthermore, Molen aims to minimise the programmer's cognitive load and thus reduce the number of bugs. The two main tools to achieve this are by [encouraging programming without side effects](https://vincenttunru.com/The-case-for-Functional-Reactive-Programming/), and by [being written in TypeScript](https://staltz.com/all-js-libraries-should-be-authored-in-typescript.html).\n\nFor more information, take a look at [the design principles](https://gitlab.com/Vinnl/Molen/blob/master/DESIGN.md).\n\n# Getting started\n\nInstall Molen:\n\n    npm install molen\n\nUnfortunately there is no extensive documentation on how to get started yet, because the API is not yet final. However, do check out [the example project](https://github.com/Vinnl/molen-example-event-sourcing) for basic usage.\n\n# Examples\n\nFor more examples, see [the example project](https://github.com/Vinnl/molen-example-event-sourcing) and [the examples/ directory](https://gitlab.com/Vinnl/Molen/tree/master/examples).\n\n## A simple HTTP server\n\n```typescript\nimport * as Http from 'molen/drivers/http';\nimport { map } from 'rxjs/operators';\n\nconst app: Http.HttpHandler = (input$) => {\n  return input$.pipe(\n    map(() => ({ body: 'Hello, world!' })),\n  );\n};\n\nHttp.driver(app, { port: 3000 });\n```\n\n## An AWS Lambda function\n\n```typescript\nimport * as AwsLambda from 'molen/drivers/awsLambda';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst lambdaFunction: AwsLambda.AwsLambdaHandler<Input, string> = (input$) => {\n  return input$.pipe(\n    map((input) => 'Hello, world!'),\n  );\n}\n\nexport const handler = AwsLambda.driver(lambdaFunction);\n```\n\n## A WebSocket server\n\n```typescript\nimport * as WebSocket from 'molen/drivers/websocket';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst echoApp: WebSocket.WebSocketHandler = (input$) => {\n  return input$.pipe(\n    map((input) => `Hello, you said: ${input.data.toString().toUpperCase()}`),\n  );\n}\n\nWebSocket.driver(echoApp, { port: 3000 });\n```\n\n# Recent changes\n\nSee the [Changelog](https://gitlab.com/Vinnl/Molen/blob/master/CHANGELOG.md).\n\n# Contributing\n\nSubmit ideas through [the issue tracker](https://gitlab.com/Vinnl/Molen/issues/new).\n\nSee [CONTRIBUTING.md](https://gitlab.com/Vinnl/Molen/blob/master/CONTRIBUTING.md) for more info.\n\n# Licence\n\nMolen is licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.1-master-713cf854d2b550ed23288621166da6d8a7fca2d1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-EP0JIVx5iw7LZx5hWZosyPNwEtwbs9+EShgbBTYUPorXMkFz55cBaKnLMgfJKfBnjvxRGtoDuAOCW2JKO6oFIA==","shasum":"ebea8acbe7b6ad66cfd66a710b12c9e6900bb072","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.1-master-713cf854d2b550ed23288621166da6d8a7fca2d1.tgz","fileCount":16,"unpackedSize":48356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboO2uCRA9TVsSAnZWagAAiPYP/2m1CGdhwj//IteLhfET\n5pWTVxijnm2dz7Ph1s4kRSExLhCE+lGUU7toHkIhMGazFutkFo4bo7/Qb+/V\nRcsl6yVJcBRh46zruUmCQwD4MVJ3g3A9hdY4zyMmKHLizru4OYaHfUv1oZtD\nkNxRnC7FanULu4kYLdUw9fyR9YYImkN9mILgZ5FvylJYu/t2kJ23tY1Yuvs+\nSWHN9tnY/mkTYh6xm12h0tBR2Kmx15WFe31YOUTfjgZLcsfKgQCzuijvotkF\nwWpn4OmIlU7zs2Gz4LpzDYjCYqLef3EcSkfj/n7DWXf2X306JI5rXUu6bAw3\nVdxiLMeaxo5bECMnu8kJDciQuE8YaTIQouml/aTJJHquAaHJgeBNop46xOdK\nJNPkWWYwIhfBIOEBjw8/G5tg+3b33vU7LBhP33FQs689jshM0pEqjLwkn8gJ\nUSV290AgH6yDNQo/9cxDSHHgDMnmACUwoLoj46WJhJTmcntCNKv8b9He5tuN\nYGh81/Ul3JkUq9K2yC92INsfZ6XF7vLaR1oUkA/6sFihaa7g+j1SRjio7V3X\nscsgAvfttSQLX40D9p8jejzMpDMi0ofESJM41JnwZO7FPcC1YIjgBiOK7N4A\nanFMHD/ET5MevEGXJSiSdP1NxMx3O+K7dcCs1hHBXX/++xIDhV628Kqr2Ufr\n1s0j\r\n=T9PO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFkQeH4rjCuKx2yfkYsHGpBgjxh2RicInJWNjm85nzcxAiEA9NcWZJQukkLK3OSeR6nIyeprJrQFKWgEAZ02SOAu8ws="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.1-master-713cf854d2b550ed23288621166da6d8a7fca2d1_1537273261917_0.12172945257126244"},"_hasShrinkwrap":false},"0.1.1":{"name":"molen","version":"0.1.1","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"713cf854d2b550ed23288621166da6d8a7fca2d1","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-3uIPRcjrUosHrxkEryfYhnsEwh8Rc+kpXTH78yVU5iojr0kQ5I50cFu/pt1ZToQYzV1nweWTRx7FUdgU9eQkgA==","shasum":"0673a8a1d1991c518d7fa46e75a3b896c6e9ab4a","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.1.tgz","fileCount":16,"unpackedSize":48308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboPIXCRA9TVsSAnZWagAASAwP/RoeOBgtkgJTFA4lCj2l\nmHozQM7Mrwt/91vj0u327Kjs9Vlj7AUbeydC6X2z2V6JmX+LC49bNvujkc5h\nj7dM4r4oxym/YYN9XKOTbA9JhN3iQFQTEJByTsRshzD9cVEByCznPCLGyCwj\n3o5oFKV6um60ycsoviMLxR5SXK34tYSkrDg7CgmBpX3eTfzBmvu/YzGULZyM\nzAewlR69B4ViCFtu3IoKNC2F1eoZgZP8fMAJN9+p40sMl73YuihBLPWn0DYx\nwXX3vL3boNd0BxCupqJ2P2Rm90vO6PR6Edi04mpXdkfYvo6rIAXat9hjTu2W\nrsxePgIAWt//J9fgJVp81muLpyw/fiu59n//OMkW0bBeFZWGCYZnIhVlMegp\nfgeY7iV3ksFp98cDjeXBM5bMEWSDdC/Goucbs1p0ffDZRAVFusmhvLpywfCS\nlkfHRn7eieHKAwMzQ6q8wlQOdS1NbT0dQZqOOMdzn81URLb+rFGutKvyq26D\nKF0RwquKpTURiG0hLRlhZ3cK9wlkURWvxvS9XQ2kvwJ3ngKZYKitQobT9BrD\nEZc46g1VJ929Nd/Q1teHsWmLcC4mL0+90zwhLQPZZPTXnByVyhVm/5qkpqXR\n/854ZF9Ppg8c6hMqY8/CTiFpbVD+HK5Ci+6LTShf9NTd5iL/X/q0cXcaQImx\nephA\r\n=Xg7Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmjEfog1V5L/ZE3QhHOYKqnelOPjvmuYYtZDhZQYuR/wIgIP+aY6JF2eEMV0Qg8l7skhrZ6mK1dSltkQXmOsFY9N8="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.1_1537274390877_0.015192941521477099"},"_hasShrinkwrap":false,"deprecated":"Molen was an experiment that has since been ended, and this package is no longer being developed."},"0.1.2-master-a5be1d331766f99b16362b4c091e487180ea97f8":{"name":"molen","version":"0.1.2-master-a5be1d331766f99b16362b4c091e487180ea97f8","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"a5be1d331766f99b16362b4c091e487180ea97f8","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nPlease take note that this is still highly experimental, and the API is unlikely to be perfect (and hence likely to change).\n\n# Why Molen\n\nMolen is built around the idea that asynchronicity plays a large role in many back-ends, and that many common operations can benefit from the reactive paradigm. For example, reactive operators can make it trivial to [limit the amount of requests](https://rxjs-dev.firebaseapp.com/api/operators/debounceTime), [time-out operations that take too long](https://rxjs-dev.firebaseapp.com/api/operators/race), [retry failed actions](https://rxjs-dev.firebaseapp.com/api/operators/retry), [throttle requests](https://rxjs-dev.firebaseapp.com/api/operators/throttleTime), etc.\n\nFurthermore, Molen aims to minimise the programmer's cognitive load and thus reduce the number of bugs. The two main tools to achieve this are by [encouraging programming without side effects](https://vincenttunru.com/The-case-for-Functional-Reactive-Programming/), and by [being written in TypeScript](https://staltz.com/all-js-libraries-should-be-authored-in-typescript.html).\n\nFor more information, take a look at [the design principles](https://gitlab.com/Vinnl/Molen/blob/master/DESIGN.md).\n\n# Getting started\n\nInstall Molen:\n\n    npm install molen\n\nUnfortunately there is no extensive documentation on how to get started yet, because the API is not yet final. However, do check out [the example project](https://github.com/Vinnl/molen-example-event-sourcing) for basic usage.\n\n# Examples\n\nFor more examples, see [the example project](https://github.com/Vinnl/molen-example-event-sourcing) and [the examples/ directory](https://gitlab.com/Vinnl/Molen/tree/master/examples).\n\n## A simple HTTP server\n\n```typescript\nimport * as Http from 'molen/drivers/http';\nimport { map } from 'rxjs/operators';\n\nconst app: Http.HttpHandler = (input$) => {\n  return input$.pipe(\n    map(() => ({ body: 'Hello, world!' })),\n  );\n};\n\nHttp.driver(app, { port: 3000 });\n```\n\n## An AWS Lambda function\n\n```typescript\nimport * as AwsLambda from 'molen/drivers/awsLambda';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst lambdaFunction: AwsLambda.AwsLambdaHandler<Input, string> = (input$) => {\n  return input$.pipe(\n    map((input) => 'Hello, world!'),\n  );\n}\n\nexport const handler = AwsLambda.driver(lambdaFunction);\n```\n\n## A WebSocket server\n\n```typescript\nimport * as WebSocket from 'molen/drivers/websocket';\nimport { map } from 'rxjs/operators';\n\nconst echoApp: WebSocket.WebSocketHandler = (input$) => {\n  return input$.pipe(\n    map((input) => `Hello, you said: ${input.data.toString().toUpperCase()}`),\n  );\n}\n\nWebSocket.driver(echoApp, { port: 3000 });\n```\n\n# Recent changes\n\nSee the [Changelog](https://gitlab.com/Vinnl/Molen/blob/master/CHANGELOG.md).\n\n# Contributing\n\nSubmit ideas through [the issue tracker](https://gitlab.com/Vinnl/Molen/issues/new).\n\nSee [CONTRIBUTING.md](https://gitlab.com/Vinnl/Molen/blob/master/CONTRIBUTING.md) for more info.\n\n# Licence\n\nMolen is licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.2-master-a5be1d331766f99b16362b4c091e487180ea97f8","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-9Na7G9IdsyfjC3wLCdf/i+jU7iUmea7dv5lxnCgzZ8WpG87PprUQ2Byai95dU50zjPWwf4ZPNRiaex3PXOBTcw==","shasum":"f336ea81c4f2412214f14ba140f67df263aefe18","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.2-master-a5be1d331766f99b16362b4c091e487180ea97f8.tgz","fileCount":16,"unpackedSize":48424,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboPVbCRA9TVsSAnZWagAARS4QAJD977SurnLMXWv/g71T\nAoQUFAIOY+yF6jy0wrT0aKfa+ZmvOb1mToEK7uiri6ySyNjpIIu1nnnTsD88\nQ2L9CY9KRUdtQ0okp4HjpP1xJR+RMgRyCZdYPTFHOmTW/GgSD7f+pghOFDSX\ng9j5iaHW0x6eunXXQlEgkum+LbQHAIf7xcd3HooMQu6097cYsISMx9kPZg5o\nlrwymsdJIqo84oh9+JLVbj2CbYgKhRpM1120hd7kqpmm69oWBE4axlVm8brW\ngVXdQIZhRfjCSrK+wGELmWDmtnWhlrdQgWa+tN2YTee0dAFvOUndqVLPLylV\ntqlDcCUqAeoFEO+yFGyyCjgDR+y+xQ9f90EbAY6X0F1Y8By8wN6+oFgYgqrP\ns9oxxdu6mdPtkHxecjXvIoklwM1S2+QJ25CruRrBS9vwGbbZ/ijSlCO6Bwc5\n0hZ38Rf0SqJtqKXzRbswuLHzbVjQ+EahNcv5fRX2wfKPFSPCFAJVxXccQ7nM\ng+PPopM0MyPvRRaGtY0tqv2weUyXb6c0evKxK38M7mcwaTrU7WFg7/9cjTfy\nSzO5f79QtsfiNsTmbty2+0itoL0JWhpyOKbxjjPHR63gyFiKa2wuWBUR3jDX\nzN1Bhl2bAbHhbnTX6lPceyKRe0XvhzYS567vAh/gUu26D9L8Z1NFBUVZSnN9\n3YCc\r\n=DziI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOmN6k3Ts3E4x4vX/buH5SV0YzHnfGyXS7kwvpGr0kEAIhAJwZEzb1B/jwOiQDcYyP4lAYlf6l/ZE1g3OcYQBh95e0"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.2-master-a5be1d331766f99b16362b4c091e487180ea97f8_1537275227205_0.13016370747663597"},"_hasShrinkwrap":false},"0.1.2":{"name":"molen","version":"0.1.2","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"a5be1d331766f99b16362b4c091e487180ea97f8","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.2","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-/bIvy1384QQTBPIdXqGr71KGK/91crmjUO8SClNV3n3hIsfs+zl+7pEwltiDiAmc8YSoSReTtwJMC6vYdqaCfA==","shasum":"96919d318085a28646cee2025284d28eca5a27c2","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.2.tgz","fileCount":16,"unpackedSize":48376,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboPiPCRA9TVsSAnZWagAAwd8P+wUe0ulP3PivzdyMXhrd\n8yIT4fwhPJG8fjfN7C8xS7Y1SBIxo2pQZQB6U5j2eConSg0BGhbcTgN64XSE\n0SD980mQOKkSOHr9L9n+fbUqXXyxLBFcFHXyzXYj4vxjXI2DkTB0iyFkRx9Y\nflhLqv6Zi61rLLIGnZYGD1w8TWfZKgRo1HG0KpPs38AtxxQKYthyxYHamYPV\nHlnNzkJXNGwK5h5EE5nUmjZpDHURN/wn3r4wvCd45zRuEUEitOSCOIjU0fL9\n3U5CMLmPLMMA6A5X3cvputz8R88kID2EBPCn1/lqZ9k7PeFIIHSTMVhHHtII\nNOfQGNoTHxYqISLNWjA8drvyjvivpdJ7PRPq2uVlMe3No7znc9Z+JEFi6w3/\nAulYNcqndGJookXD1irbla0Prxi8bR5zOe1MWPKhJd18cgThOgMxLi54EaSR\nC8dOJlaqTU7LTu/tttB8aTxeWtrC/OpaW6EBpaxFQQlPtqSqNa3i+35JpJBY\nbRqdkhxGCynvIegEDx9C/omo7QkvRXmI2edSLCFs50hScyMDjPl/z/JJmWKF\nE6muudAVb+kQjGbYn2u5VPzyHCmbPRxbjTwzErvUcGH2AD8KKcyXWJXsMtkp\nRLv/njc+iIo1SFV+rGvf62qQtJuWmMK5kd7vxZxR5Y2D0KswFYhEfrKUWKtB\n0kEA\r\n=JQtk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICCPR7ZBBDIsg5BTVIle0TDWEUt3RCNz93CnqhdcnBwrAiEAgOKB1KD+fFMsT2vrxaeKxZIShoOEQpKGLxBTlG/uZiM="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.2_1537276046634_0.9819731213945924"},"_hasShrinkwrap":false,"deprecated":"Molen was an experiment that has since been ended, and this package is no longer being developed."},"0.1.3-master-04e7c48136c40ca48b93a0722cbc0992ef312987":{"name":"molen","version":"0.1.3-master-04e7c48136c40ca48b93a0722cbc0992ef312987","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"04e7c48136c40ca48b93a0722cbc0992ef312987","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nPlease take note that this is still highly experimental, and the API is unlikely to be perfect (and hence likely to change).\n\n# DEPRECATION NOTICE\n\nThe experiment has ended; the code is primarily preserved for posterity. My primary conclusion would be that FRP is not especially better-suited to regular web server use cases than, say, Express. The main reason for this is that advanced async operations do not play a large role in such use cases, and since the ecosystem is not designed around Observables, the marshalling of data into and out of Observables, combined with the added indirection, is not worth the benefits.\n\nIf you are interested in using the npm package name `molen`, contact molen+npm@VincentTunru.com.\n\n# Why Molen\n\nMolen is built around the idea that asynchronicity plays a large role in many back-ends, and that many common operations can benefit from the reactive paradigm. For example, reactive operators can make it trivial to [limit the amount of requests](https://rxjs-dev.firebaseapp.com/api/operators/debounceTime), [time-out operations that take too long](https://rxjs-dev.firebaseapp.com/api/operators/race), [retry failed actions](https://rxjs-dev.firebaseapp.com/api/operators/retry), [throttle requests](https://rxjs-dev.firebaseapp.com/api/operators/throttleTime), etc.\n\nFurthermore, Molen aims to minimise the programmer's cognitive load and thus reduce the number of bugs. The two main tools to achieve this are by [encouraging programming without side effects](https://vincenttunru.com/The-case-for-Functional-Reactive-Programming/), and by [being written in TypeScript](https://staltz.com/all-js-libraries-should-be-authored-in-typescript.html).\n\nFor more information, take a look at [the design principles](https://gitlab.com/Vinnl/Molen/blob/master/DESIGN.md).\n\n# Getting started\n\nInstall Molen:\n\n    npm install molen\n\nUnfortunately there is no extensive documentation on how to get started yet, because the API is not yet final. However, do check out [the example project](https://github.com/Vinnl/molen-example-event-sourcing) for basic usage.\n\n# Examples\n\nFor more examples, see [the example project](https://github.com/Vinnl/molen-example-event-sourcing) and [the examples/ directory](https://gitlab.com/Vinnl/Molen/tree/master/examples).\n\n## A simple HTTP server\n\n```typescript\nimport * as Http from 'molen/drivers/http';\nimport { map } from 'rxjs/operators';\n\nconst app: Http.HttpHandler = (input$) => {\n  return input$.pipe(\n    map(() => ({ body: 'Hello, world!' })),\n  );\n};\n\nHttp.driver(app, { port: 3000 });\n```\n\n## An AWS Lambda function\n\n```typescript\nimport * as AwsLambda from 'molen/drivers/awsLambda';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst lambdaFunction: AwsLambda.AwsLambdaHandler<Input, string> = (input$) => {\n  return input$.pipe(\n    map((input) => 'Hello, world!'),\n  );\n}\n\nexport const handler = AwsLambda.driver(lambdaFunction);\n```\n\n## A WebSocket server\n\n```typescript\nimport * as WebSocket from 'molen/drivers/websocket';\nimport { map } from 'rxjs/operators';\n\nconst echoApp: WebSocket.WebSocketHandler = (input$) => {\n  return input$.pipe(\n    map((input) => `Hello, you said: ${input.data.toString().toUpperCase()}`),\n  );\n}\n\nWebSocket.driver(echoApp, { port: 3000 });\n```\n\n# Recent changes\n\nSee the [Changelog](https://gitlab.com/Vinnl/Molen/blob/master/CHANGELOG.md).\n\n# Contributing\n\nSubmit ideas through [the issue tracker](https://gitlab.com/Vinnl/Molen/issues/new).\n\nSee [CONTRIBUTING.md](https://gitlab.com/Vinnl/Molen/blob/master/CONTRIBUTING.md) for more info.\n\n# Licence\n\nMolen is licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.3-master-04e7c48136c40ca48b93a0722cbc0992ef312987","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-RfTylna6RotVbTlyc7la6aSHSFhFDlbRlQK3cnIJuydOFOIAvnBkIRRkuaiK/0wnXSYbfJBUp4/6iASWqy/mRg==","shasum":"a2270395d2ee295bab4974fceb8a03dbbb25a06f","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.3-master-04e7c48136c40ca48b93a0722cbc0992ef312987.tgz","fileCount":16,"unpackedSize":49074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbvGxwCRA9TVsSAnZWagAAP4kP/jtklpm3jPy0uX/Bnclo\nc4lVWICrKL0BDp/yNwv0up8urshAbIkkbWFwtnL1HbB18X0etGCuQ+eibmvr\nQh6UQLfV204GGtqM8/t+8rWteI2cQJyO5X0W/Xg47Ng0dDecurT1UzEMJs/H\n4s/Ph4eJsJMc31vTU7BMPFxdUdaxfVrbj0oUfNxVBpmXpjcOCUOPeCJrsdR4\nI86ndXLnfkWlEIQ1vscSb0RcJs0dokX0i1nDWVYGIJKpmpFZOabnxhGqWhXg\nZxUBRF9AAFKZ9zBzO70dfTPqdeAZdtu2BwgXE96WCyYBzxLyzhxQ6kSV0XjN\nTaY+EnqCpliVXvGB7nKMP6/+6qhx6L5Xo/NzHeXkmj/UufHiZrh1Khv3IZtd\n7mQCGGNe0QC76JuDmLNwXwpukDwXqVcZpYpfMYs01BP1Xg/4aE/XuCNf25F0\nAI9ExersRQup+qOg/msprE9X+d74QsK+BNBH07oyW6arg2YpWw+FvNqopuIF\nSfsK8qP65GCkqWZMqyNPp0PYuHGoIDBEsjhINKMicXCp+BcG9joNz/asOnpG\nMOPBhW3Yfe8f/8FeHcudJ/IH5Fhjglovo7mKzjOiLuQbsEkNg4AOO5SYVa2G\n63/WjpUOpzl7u4Ua8X34//HPjuf/wrWU0nJvM5aqGUROQcV8ydmwZh+O2hsw\naSfn\r\n=wbHK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQ7Xv8dnntB8HRMEfCSIRu0yHwNGPDwDPfAx8tRfvDyAIhAN+sMJdGSpNeMxdUliwOo9dQB0MTSRGmo4ZThk3CrFfO"}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.3-master-04e7c48136c40ca48b93a0722cbc0992ef312987_1539075184096_0.5506667056920693"},"_hasShrinkwrap":false},"0.1.3":{"name":"molen","version":"0.1.3","description":"Functional reactive web application framework","scripts":{"build":"tsc","prepublishOnly":"yarn run build"},"main":"index.js","types":"index.d.ts","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"},"license":"MIT","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"dependencies":{"@types/aws-lambda":"^8.10.11","@types/express":"^4.16.0","@types/node":"^10.5.6","@types/node-fetch":"^2.1.2","@types/ws":"^6.0.0","express":"^4.16.3","node-fetch":"^2.2.0","path-to-regexp":"^2.2.1","rxjs":"^6.2.2","ws":"^6.0.0"},"devDependencies":{"rxjs-tslint":"^0.1.5","tslint":"^5.11.0","typescript":"^3.0.1"},"gitHead":"04e7c48136c40ca48b93a0722cbc0992ef312987","homepage":"https://gitlab.com/Vinnl/Molen#readme","_id":"molen@0.1.3","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"vincenttunru","email":"npm@vincenttunru.com"},"dist":{"integrity":"sha512-xzkDWB+CCx4UHnf+kfn4cIwzhNJuUxXFgQTELxC32yynD3nZeA5328jlhkgDA0JEro6IJt/ZR+qntXJ/THqq9g==","shasum":"d79dec24ba30bebd5ff0fdff5620f977dedd7b97","tarball":"https://registry.npmjs.org/molen/-/molen-0.1.3.tgz","fileCount":16,"unpackedSize":49026,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbvG01CRA9TVsSAnZWagAA7e4P/j4wdYI2ZoWTIUADLwBR\n1OUt7OKA96xLQ84cz66rEPwvDdf2QNVq4KP60SkXIkhaVfoiooW22bFzV7j8\n1HHL3kKJ5BULUBnEVDDmVDujD1jZPOdzh3W1UeDbUxYHb+JADi3mXeN5L/ms\naE2dYyfuWEfK8wQYDJhcAyw1eOnww25Ep7mk2WgItU3+wmm31//AnNSDIYRb\nElqK49bAqZ+kppu/qA6bTKW5nhLFyv2bfP4cMS6fDT2U+hWIPKBTR7kRXhnT\nVcmh3VEq87edFPSQeNws8YcKD5zk3mFV5PggQKAkQMoltBKRtvc1Nl3KP4ha\nHZwf6Ql5lj5YCVs3qhmf0alB0NaZCUNUwUUK2djxGTarutbiVD7z6o6UWSjN\ncxRwKeH0QBDpY1ruRbWg7GYqqj0dAwP/lcFEkCCoaFEZ6XLa9Q22kqlaKhkw\nLV0af7Bwp/7F2H0Awj99efQoR5qdL7PKvDW8FX1u5W6Q9OVyOsCzEuhfvd24\nY5sHjuMn4pD8xEz0gXnPNLrPOAvdcZH5en9Vkfc37fF7QCnwbBtbXjuU1hZx\n4IlniE0Pq9Jz7eTShKeXwk/HVlw7rtYXfMaBPSBqC3GFlZJ/4KXhj5gTKu4f\nJH0oNDSvm36HDkinZj9Y53Eba0Eyya/Wyk5AFkRr346JWaOwr/cfciTaSejm\nr6vK\r\n=VHYq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDi21qdRCRPzN9rnbtM9QUqYl92PpB8tHL2vXF0OBsTjAiEAsGAhz8ySKhvq4yzaQynBVFTFRAZkmrHrYPetdfC6Q78="}]},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/molen_0.1.3_1539075381342_0.6676250100668413"},"_hasShrinkwrap":false,"deprecated":"Molen was an experiment that has since been ended, and this package is no longer being developed."}},"time":{"created":"2018-08-28T10:52:21.954Z","0.1.0-d85e6a1efad6d1ebb564b5e5909520f8522aa8a9":"2018-08-28T10:52:27.581Z","modified":"2022-05-09T17:08:54.378Z","0.1.0-3a33bf955f68574fc8263d723b859b6247c254df":"2018-08-28T11:17:33.240Z","0.1.0-2891f698a4b3e5220682fd060bbf81a38beb2f2b":"2018-08-28T11:35:25.073Z","0.1.0-024029d0a77e5dfe49bce12c5802b65509b4b170":"2018-08-28T11:50:53.088Z","0.1.0-c2f5ee36823af846b82c92b1c49c80d88fdc88bd":"2018-08-28T12:21:31.153Z","0.1.0-ee258891c7f36d36a1f6cc2b9eb35b89979a0ada":"2018-08-28T14:18:54.585Z","0.1.0-bfcd537d0e2d6849c645bbb401372ea1f6e4ec2d":"2018-08-28T14:29:12.884Z","0.1.0-ddefceb29546858de1b26a22679a575de7b80623":"2018-08-28T14:35:39.649Z","0.1.0-c5d4edf00772c44441ff8eb729796fc779f9d030":"2018-09-03T09:21:15.880Z","0.1.0-b315b4a9e4fe91ebfe2d485ff3799e1793c926aa":"2018-09-03T10:10:15.172Z","0.1.0-a8e1ee06a120062be1efd92dbff8841fcbdbf4dc":"2018-09-03T12:01:13.555Z","0.1.0-1-create-an-example-in-which-two-api-s-are-combined-ebe046bb2d61e9c7c1f7154c5ef8d33ec0be988f":"2018-09-03T12:20:47.104Z","0.1.0-1-create-an-example-in-which-two-api-s-are-combined-e1ec6fed8ca3cdc384ad9b2df8044c618a25d846":"2018-09-03T15:07:49.690Z","0.1.0-master-de3a9965c417a09e2f6f67f5235e1a2f657979a5":"2018-09-05T09:15:02.637Z","0.1.0-2-rework-api-de3a9965c417a09e2f6f67f5235e1a2f657979a5":"2018-09-05T10:06:02.026Z","0.1.0-2-rework-api-7d5d98abf9b0d1f6e37689aea4d8ea87be859cc4":"2018-09-05T13:56:28.128Z","0.1.0-2-rework-api-24709f1e66de60ed06c5b248653e0984972d8f95":"2018-09-05T14:07:34.966Z","0.1.0-2-rework-api-4d38714c3819befa72493def54a23e07dc6701b8":"2018-09-05T14:26:53.487Z","0.1.0-master-7996e224d182adaf6d08dda6a840de98012130c9":"2018-09-05T14:32:08.770Z","0.1.0-master-59b9dad056563cc734ebc828fae61c985b7f3929":"2018-09-10T10:07:39.848Z","0.1.0-master-556d8dea7490f77cd295690e50912b56bc5b9c11":"2018-09-10T10:56:49.543Z","0.1.0-master-c5fd50b94c1eadc6e6deda352f5d06aae5d4303a":"2018-09-10T11:13:13.935Z","0.1.0-master-7cc56163dd472067bd585d477c0c74ee92d58393":"2018-09-10T11:33:54.039Z","0.1.0-4-experiment-with-a-convenience-serialisation-method-7cc56163dd472067bd585d477c0c74ee92d58393":"2018-09-11T12:06:59.420Z","0.1.0-5-export-drivers-from-the-top-level-7cc56163dd472067bd585d477c0c74ee92d58393":"2018-09-11T12:07:18.419Z","0.1.0-5-export-drivers-from-the-top-level-3fbbee098df791fbcc3962a539f6daceb1fbe994":"2018-09-11T12:14:46.594Z","0.1.0-5-export-drivers-from-the-top-level-0714fa0dd21c94cad1f38d99349c92b8ab067bb3":"2018-09-11T12:25:45.935Z","0.1.0-5-export-drivers-from-the-top-level-4cd99542eae2c69ac23737c578c71ff03752a231":"2018-09-11T12:31:32.759Z","0.1.0-5-export-drivers-from-the-top-level-ce188e572b7d1aeb651ea250b80a17a3952d9d7b":"2018-09-11T12:39:28.788Z","0.1.0-5-export-drivers-from-the-top-level-5ee4748b02e64f8351c5cd39575768a8ebff1c50":"2018-09-11T12:43:12.414Z","0.1.0-master-59ea9578c5117c642a2b65861b29f39d671a03bb":"2018-09-11T12:50:03.902Z","0.1.0-master-a4cf4506c5173d8a635b99b093540a8fb27b4201":"2018-09-13T14:58:28.922Z","0.1.0-master-82972f25f83f2121c9b0099fa1fa5220554fa96c":"2018-09-13T15:05:34.765Z","0.1.0":"2018-09-13T15:14:46.352Z","0.1.0-master-59487994ae5f667fd426ae8d4a4ddc7dc168f515":"2018-09-13T15:29:22.869Z","0.1.0-master-2e3b3a563cc1ccb2284c715408dce59de6edb4c5":"2018-09-18T12:11:12.192Z","0.1.1-master-95473ba6747af4501fb7263c5936d0b1adfc9a96":"2018-09-18T12:13:52.933Z","0.1.1-master-713cf854d2b550ed23288621166da6d8a7fca2d1":"2018-09-18T12:21:02.085Z","0.1.1":"2018-09-18T12:39:51.041Z","0.1.2-master-a5be1d331766f99b16362b4c091e487180ea97f8":"2018-09-18T12:53:47.384Z","0.1.2":"2018-09-18T13:07:26.838Z","0.1.3-master-04e7c48136c40ca48b93a0722cbc0992ef312987":"2018-10-09T08:53:04.349Z","0.1.3":"2018-10-09T08:56:21.482Z"},"maintainers":[{"name":"vincenttunru","email":"npm@vincenttunru.com"}],"description":"Functional reactive web application framework","author":{"name":"Vincent","email":"molen@vincenttunru.com"},"license":"MIT","readme":"Molen is a prototype aimed at exploring how to apply Functional and Reactive Programming to the back-end.\n\nPlease take note that this is still highly experimental, and the API is unlikely to be perfect (and hence likely to change).\n\n# DEPRECATION NOTICE\n\nThe experiment has ended; the code is primarily preserved for posterity. My primary conclusion would be that FRP is not especially better-suited to regular web server use cases than, say, Express. The main reason for this is that advanced async operations do not play a large role in such use cases, and since the ecosystem is not designed around Observables, the marshalling of data into and out of Observables, combined with the added indirection, is not worth the benefits.\n\nIf you are interested in using the npm package name `molen`, contact molen+npm@VincentTunru.com.\n\n# Why Molen\n\nMolen is built around the idea that asynchronicity plays a large role in many back-ends, and that many common operations can benefit from the reactive paradigm. For example, reactive operators can make it trivial to [limit the amount of requests](https://rxjs-dev.firebaseapp.com/api/operators/debounceTime), [time-out operations that take too long](https://rxjs-dev.firebaseapp.com/api/operators/race), [retry failed actions](https://rxjs-dev.firebaseapp.com/api/operators/retry), [throttle requests](https://rxjs-dev.firebaseapp.com/api/operators/throttleTime), etc.\n\nFurthermore, Molen aims to minimise the programmer's cognitive load and thus reduce the number of bugs. The two main tools to achieve this are by [encouraging programming without side effects](https://vincenttunru.com/The-case-for-Functional-Reactive-Programming/), and by [being written in TypeScript](https://staltz.com/all-js-libraries-should-be-authored-in-typescript.html).\n\nFor more information, take a look at [the design principles](https://gitlab.com/Vinnl/Molen/blob/master/DESIGN.md).\n\n# Getting started\n\nInstall Molen:\n\n    npm install molen\n\nUnfortunately there is no extensive documentation on how to get started yet, because the API is not yet final. However, do check out [the example project](https://github.com/Vinnl/molen-example-event-sourcing) for basic usage.\n\n# Examples\n\nFor more examples, see [the example project](https://github.com/Vinnl/molen-example-event-sourcing) and [the examples/ directory](https://gitlab.com/Vinnl/Molen/tree/master/examples).\n\n## A simple HTTP server\n\n```typescript\nimport * as Http from 'molen/drivers/http';\nimport { map } from 'rxjs/operators';\n\nconst app: Http.HttpHandler = (input$) => {\n  return input$.pipe(\n    map(() => ({ body: 'Hello, world!' })),\n  );\n};\n\nHttp.driver(app, { port: 3000 });\n```\n\n## An AWS Lambda function\n\n```typescript\nimport * as AwsLambda from 'molen/drivers/awsLambda';\nimport { map } from 'rxjs/operators';\n\ntype Input = {};\n\nconst lambdaFunction: AwsLambda.AwsLambdaHandler<Input, string> = (input$) => {\n  return input$.pipe(\n    map((input) => 'Hello, world!'),\n  );\n}\n\nexport const handler = AwsLambda.driver(lambdaFunction);\n```\n\n## A WebSocket server\n\n```typescript\nimport * as WebSocket from 'molen/drivers/websocket';\nimport { map } from 'rxjs/operators';\n\nconst echoApp: WebSocket.WebSocketHandler = (input$) => {\n  return input$.pipe(\n    map((input) => `Hello, you said: ${input.data.toString().toUpperCase()}`),\n  );\n}\n\nWebSocket.driver(echoApp, { port: 3000 });\n```\n\n# Recent changes\n\nSee the [Changelog](https://gitlab.com/Vinnl/Molen/blob/master/CHANGELOG.md).\n\n# Contributing\n\nSubmit ideas through [the issue tracker](https://gitlab.com/Vinnl/Molen/issues/new).\n\nSee [CONTRIBUTING.md](https://gitlab.com/Vinnl/Molen/blob/master/CONTRIBUTING.md) for more info.\n\n# Licence\n\nMolen is licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","readmeFilename":"README.md","homepage":"https://gitlab.com/Vinnl/Molen#readme","keywords":["FRP","reactive","functional","RxJS","Rx","ReactiveX","framework","express","TypeScript","streams","Observable","Observables"],"repository":{"type":"git","url":"git+https://gitlab.com/Vinnl/Molen.git"},"bugs":{"url":"https://gitlab.com/Vinnl/Molen/issues"}}