{"_id":"phridge","_rev":"331423","name":"phridge","description":"A bridge between node and phantomjs","dist-tags":{"latest":"2.0.0"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"time":{"modified":"2021-06-07T02:46:54.000Z","created":"2014-05-26T00:17:53.109Z","2.0.0":"2016-01-31T14:30:03.378Z","1.2.2":"2015-10-10T13:57:13.067Z","1.2.1":"2015-10-09T12:03:03.567Z","1.2.0":"2015-10-05T19:36:05.047Z","1.1.0":"2015-04-28T00:13:38.782Z","1.0.8":"2015-03-21T14:52:39.310Z","1.0.7":"2014-10-28T00:34:54.037Z","1.0.6":"2014-09-03T12:40:16.959Z","1.0.5":"2014-09-03T08:49:11.284Z","1.0.4":"2014-09-02T10:19:51.529Z","1.0.3":"2014-08-08T17:16:54.237Z","1.0.2":"2014-08-07T20:33:14.306Z","1.0.1":"2014-08-07T02:15:06.672Z","1.0.0":"2014-08-03T22:32:14.834Z","0.1.5":"2014-08-03T10:46:15.387Z","0.1.4":"2014-07-02T23:57:26.980Z","0.1.2":"2014-06-05T13:08:15.815Z","0.1.1":"2014-05-26T12:36:20.099Z","0.1.0":"2014-05-26T00:17:53.109Z"},"users":{"brentonhouse":true,"niccai":true,"ajduke":true,"dickeylth":true,"goliatone":true,"algonzo":true,"arttse":true},"author":{"name":"peerigon","email":"developers@peerigon.com"},"repository":{"type":"git","url":"git+https://github.com/peerigon/phridge.git"},"versions":{"2.0.0":{"name":"phridge","version":"2.0.0","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"mocha -R spec","posttest":"eslint examples lib test","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","driver"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","phantomjs-prebuilt":"^2.1.3","temp":"^0.8.0"},"devDependencies":{"chai":"^3.2.0","chai-as-promised":"^5.1.0","eslint":"^1.6.0","eslint-config-peerigon":"^2.0.0","getport":"^0.1.0","istanbul":"^0.4.2","mocha":"^2.2.5","ps-node":"^0.0.5","sinon":"^1.14.1","sinon-chai":"^2.7.0"},"repository":{"type":"git","url":"git+https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"0aa95f81dffcaab48357ebf2aab42ce64ce69247","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge#readme","_id":"phridge@2.0.0","_shasum":"aba7392945242fb495277d70e76c4b97e4285bb6","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"dist":{"shasum":"aba7392945242fb495277d70e76c4b97e4285bb6","size":52822,"noattachment":false,"key":"/phridge/-/phridge-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-2.0.0.tgz"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"directories":{},"publish_time":1454250603378,"_cnpm_publish_time":1454250603378,"_hasShrinkwrap":false},"1.2.2":{"name":"phridge","version":"1.2.2","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"mocha -R spec","posttest":"eslint examples lib test","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","driver"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^3.2.0","chai-as-promised":"^5.1.0","eslint":"^1.6.0","eslint-config-peerigon":"^0.1.1","getport":"^0.1.0","istanbul":"^0.3.22","mocha":"^2.2.5","ps-node":"^0.0.5","sinon":"^1.14.1","sinon-chai":"^2.7.0"},"repository":{"type":"git","url":"git+https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"7fc28006d2824290ce2c6294049eee3ad568c27f","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge#readme","_id":"phridge@1.2.2","_shasum":"1d2f3eaa27ccd0d77b332b38fb0d0c246caee326","_from":".","_npmVersion":"2.14.3","_nodeVersion":"4.1.0","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"1d2f3eaa27ccd0d77b332b38fb0d0c246caee326","size":52808,"noattachment":false,"key":"/phridge/-/phridge-1.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.2.2.tgz"},"directories":{},"publish_time":1444485433067,"_cnpm_publish_time":1444485433067,"_hasShrinkwrap":false},"1.2.1":{"name":"phridge","version":"1.2.1","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"mocha -R spec","posttest":"eslint examples lib test","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","driver"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^3.2.0","chai-as-promised":"^5.1.0","eslint":"^1.6.0","eslint-config-peerigon":"^0.1.1","getport":"^0.1.0","istanbul":"^0.3.22","mocha":"^2.2.5","ps-node":"^0.0.5","sinon":"^1.14.1","sinon-chai":"^2.7.0"},"repository":{"type":"git","url":"git+https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"bcec7b690422198971e2d33bf9b6fb3afcf53387","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge#readme","_id":"phridge@1.2.1","_shasum":"932ef4e85e926948e6da67171c8aa0465a33ca0b","_from":".","_npmVersion":"2.14.3","_nodeVersion":"4.1.0","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"932ef4e85e926948e6da67171c8aa0465a33ca0b","size":52615,"noattachment":false,"key":"/phridge/-/phridge-1.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.2.1.tgz"},"directories":{},"publish_time":1444392183567,"_cnpm_publish_time":1444392183567,"_hasShrinkwrap":false},"1.2.0":{"name":"phridge","version":"1.2.0","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"mocha -R spec","posttest":"eslint examples lib test","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","driver"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^3.2.0","chai-as-promised":"^5.1.0","eslint":"^1.6.0","eslint-config-peerigon":"^0.1.1","getport":"^0.1.0","istanbul":"^0.3.22","mocha":"^2.2.5","ps-node":"^0.0.5","sinon":"^1.14.1","sinon-chai":"^2.7.0"},"repository":{"type":"git","url":"git+https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"bc8adc7a1279a88bb570c9b14cc1c8310f86e40a","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge#readme","_id":"phridge@1.2.0","_shasum":"56d861d75e34b9511ca7fcc23b2e74193afc6869","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"56d861d75e34b9511ca7fcc23b2e74193afc6869","size":52581,"noattachment":false,"key":"/phridge/-/phridge-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.2.0.tgz"},"directories":{},"publish_time":1444073765047,"_cnpm_publish_time":1444073765047,"_hasShrinkwrap":false},"1.1.0":{"name":"phridge","version":"1.1.0","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3","sinon":"^1.14.1","sinon-chai":"^2.7.0"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"60545fb4197315ad74b9e03303f2a2c03bcf1042","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.1.0","_shasum":"eef01c55149bbd1ffd65186230df8fbf2b138dd2","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"eef01c55149bbd1ffd65186230df8fbf2b138dd2","size":51776,"noattachment":false,"key":"/phridge/-/phridge-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.1.0.tgz"},"directories":{},"publish_time":1430180018782,"_cnpm_publish_time":1430180018782,"_hasShrinkwrap":false},"1.0.8":{"name":"phridge","version":"1.0.8","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3","sinon":"^1.14.1","sinon-chai":"^2.7.0"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"44ad3380a13673b0811b7cbc5cc13e05e678cd28","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.0.8","_shasum":"227ba0bee8b710810cea656bf5a27baba5096e2a","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"227ba0bee8b710810cea656bf5a27baba5096e2a","size":51441,"noattachment":false,"key":"/phridge/-/phridge-1.0.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.0.8.tgz"},"directories":{},"publish_time":1426949559310,"_cnpm_publish_time":1426949559310,"_hasShrinkwrap":false},"1.0.7":{"name":"phridge","version":"1.0.7","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"cd05bb06f9e2b152e0273c52416aa04dcbea3695","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.0.7","_shasum":"e33625280c2f0d718cdb03e2aa778fa17da3459b","_from":".","_npmVersion":"2.1.3","_nodeVersion":"0.10.32","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"e33625280c2f0d718cdb03e2aa778fa17da3459b","size":50596,"noattachment":false,"key":"/phridge/-/phridge-1.0.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.0.7.tgz"},"directories":{},"publish_time":1414456494037,"_cnpm_publish_time":1414456494037,"_hasShrinkwrap":false},"1.0.6":{"name":"phridge","version":"1.0.6","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"68958c7ab991e663456451fa2269dfbf51961736","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.0.6","_shasum":"5bcf3255a6d8edfe1fb9784f22f6abfdc8e8379b","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"5bcf3255a6d8edfe1fb9784f22f6abfdc8e8379b","size":50156,"noattachment":false,"key":"/phridge/-/phridge-1.0.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.0.6.tgz"},"directories":{},"publish_time":1409748016959,"_cnpm_publish_time":1409748016959,"_hasShrinkwrap":false},"1.0.5":{"name":"phridge","version":"1.0.5","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"72e34d8f51f2adfd3bc7b6b72b344163e7f3581a","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.0.5","_shasum":"124c59dca1f7be51faa0578cf0749c0e09df4f2d","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"124c59dca1f7be51faa0578cf0749c0e09df4f2d","size":50008,"noattachment":false,"key":"/phridge/-/phridge-1.0.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.0.5.tgz"},"directories":{},"publish_time":1409734151284,"_cnpm_publish_time":1409734151284,"_hasShrinkwrap":false},"1.0.4":{"name":"phridge","version":"1.0.4","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"^0.1.4","map-stream":"^0.1.0","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"6d23aef349ea4a1892d571fb747e2c8a3badeade","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.0.4","_shasum":"40ce2014f116ca9be678024edccc4a3cf8eac269","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"40ce2014f116ca9be678024edccc4a3cf8eac269","size":49823,"noattachment":false,"key":"/phridge/-/phridge-1.0.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.0.4.tgz"},"directories":{},"publish_time":1409653191529,"_cnpm_publish_time":1409653191529,"_hasShrinkwrap":false},"1.0.3":{"name":"phridge","version":"1.0.3","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"git://github.com/jhnns/linerstream.git#fix/on-windows","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"7284a1d30709d3528773d1f913a768ceb766bc51","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.0.3","_shasum":"296186acecdff159bf6da12a8fc77ef9540c6071","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"296186acecdff159bf6da12a8fc77ef9540c6071","size":49896,"noattachment":false,"key":"/phridge/-/phridge-1.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.0.3.tgz"},"directories":{},"publish_time":1407518214237,"_cnpm_publish_time":1407518214237,"_hasShrinkwrap":false},"1.0.2":{"name":"phridge","version":"1.0.2","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"git://github.com/jhnns/linerstream.git#fix/on-windows","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"4eed1037c39732a5b403ecb9b224d7519249366d","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.0.2","_shasum":"bc2dbab732d0b149c0b44c8dc310d09d27c07a32","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"bc2dbab732d0b149c0b44c8dc310d09d27c07a32","size":49737,"noattachment":false,"key":"/phridge/-/phridge-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.0.2.tgz"},"directories":{},"publish_time":1407443594306,"_cnpm_publish_time":1407443594306,"_hasShrinkwrap":false},"1.0.1":{"name":"phridge","version":"1.0.1","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"git://github.com/jhnns/linerstream.git#fix/on-windows","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"72f4c2c2988f866b277d3bacafc516ad0f053727","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.0.1","_shasum":"4663893bf1d7191feb66e134ef4d3dda14fe4574","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"4663893bf1d7191feb66e134ef4d3dda14fe4574","size":49678,"noattachment":false,"key":"/phridge/-/phridge-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.0.1.tgz"},"directories":{},"publish_time":1407377706672,"_cnpm_publish_time":1407377706672,"_hasShrinkwrap":false},"1.0.0":{"name":"phridge","version":"1.0.0","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"fork-stream":"^0.0.4","linerstream":"git://github.com/jhnns/linerstream.git#fix/on-windows","phantomjs":"^1.9.7-15","temp":"^0.8.0","when":"^3.4.2"},"devDependencies":{"chai":"^1.9.1","chai-as-promised":"^4.1.1","getport":"^0.1.0","istanbul":"^0.3.0","mocha":"^1.21.3"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"6cb96c8345169c5ba692a08c2727070e5e2f45af","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@1.0.0","_shasum":"9ad738366b7dddbca3181a79562e1704d42859c9","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"9ad738366b7dddbca3181a79562e1704d42859c9","size":49540,"noattachment":false,"key":"/phridge/-/phridge-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-1.0.0.tgz"},"directories":{},"publish_time":1407105134834,"_cnpm_publish_time":1407105134834,"_hasShrinkwrap":false},"0.1.5":{"name":"phridge","version":"0.1.5","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"getport":"0.1.x","phantomjs":"1.x","temp":"^0.8.0","when":"^3.2.3"},"devDependencies":{"mocha":"1.x","chai":"1.x","chai-as-promised":"4.x","sinon-chai":"2.x","sinon":"1.x","rewire":"2.x"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","gitHead":"336afbcce001130f604882205062efd29f87a841","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@0.1.5","_shasum":"5daf04c1153cb1ecc5121ecdb1eb08a5608baac2","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"5daf04c1153cb1ecc5121ecdb1eb08a5608baac2","size":49456,"noattachment":false,"key":"/phridge/-/phridge-0.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-0.1.5.tgz"},"directories":{},"publish_time":1407062775387,"_cnpm_publish_time":1407062775387,"_hasShrinkwrap":false},"0.1.4":{"name":"phridge","version":"0.1.4","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"getport":"0.1.x","phantomjs":"1.x","temp":"^0.8.0","when":"3.2.3"},"devDependencies":{"mocha":"1.x","chai":"1.x","chai-as-promised":"4.x","sinon-chai":"2.x","sinon":"1.x","rewire":"2.x"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@0.1.4","_shasum":"c13c834977574bf675f62e209368753575b9068e","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"dist":{"shasum":"c13c834977574bf675f62e209368753575b9068e","size":49468,"noattachment":false,"key":"/phridge/-/phridge-0.1.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-0.1.4.tgz"},"directories":{},"publish_time":1404345446980,"_cnpm_publish_time":1404345446980,"_hasShrinkwrap":false},"0.1.2":{"name":"phridge","version":"0.1.2","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"when":"3.x","phantomjs":"1.x","getport":"0.1.x","temp":"^0.8.0"},"devDependencies":{"mocha":"1.x","chai":"1.x","chai-as-promised":"4.x","sinon-chai":"2.x","sinon":"1.x","rewire":"2.x"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@0.1.2","dist":{"shasum":"5af14f359b7cec1435f2ec9e206e70271ffa3e36","size":49276,"noattachment":false,"key":"/phridge/-/phridge-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-0.1.2.tgz"},"_from":".","_npmVersion":"1.3.17","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"directories":{},"publish_time":1401973695815,"_cnpm_publish_time":1401973695815,"_hasShrinkwrap":false},"0.1.1":{"name":"phridge","version":"0.1.1","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"when":"3.x","phantomjs":"1.x","getport":"0.1.x","temp":"0.7.x"},"devDependencies":{"mocha":"1.x","chai":"1.x","chai-as-promised":"4.x","sinon-chai":"2.x","sinon":"1.x","rewire":"2.x"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@0.1.1","dist":{"shasum":"d440b0dcce5ac30f58f16d6a748ec533e6837a2a","size":49285,"noattachment":false,"key":"/phridge/-/phridge-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-0.1.1.tgz"},"_from":".","_npmVersion":"1.3.17","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"directories":{},"publish_time":1401107780099,"_cnpm_publish_time":1401107780099,"_hasShrinkwrap":false},"0.1.0":{"name":"phridge","version":"0.1.0","description":"A bridge between node and phantomjs","main":"./lib/main.js","scripts":{"test":"node node_modules/mocha/bin/mocha -R spec","coverage":"istanbul cover ./node_modules/mocha/bin/_mocha"},"keywords":["phantom","phantomjs","bridge","communication","process","subprocess","long-term","forever"],"dependencies":{"when":"3.x","phantomjs":"1.x","getport":"0.1.x","temp":"0.7.x"},"devDependencies":{"mocha":"1.x","chai":"1.x","chai-as-promised":"4.x","sinon-chai":"2.x","sinon":"1.x","rewire":"2.x"},"repository":{"type":"git","url":"https://github.com/peerigon/phridge.git"},"author":{"name":"peerigon","email":"developers@peerigon.com"},"license":"Unlicense","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"homepage":"https://github.com/peerigon/phridge","_id":"phridge@0.1.0","dist":{"shasum":"31bbb9620ab10eb86c68cb8ba21979fc1acf4346","size":48814,"noattachment":false,"key":"/phridge/-/phridge-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/phridge/download/phridge-0.1.0.tgz"},"_from":".","_npmVersion":"1.3.17","_npmUser":{"name":"peerigon","email":"developers@peerigon.com"},"maintainers":[{"name":"antosan","email":"sandeantony@gmail.com"},{"name":"hpohlmeyer","email":"info@prophet-design.de"},{"name":"jhnns","email":"mail@johannesewald.de"},{"name":"leomelzer","email":"leonhard.melzer@peerigon.com"},{"name":"matthaias","email":"matthias.jahn@peerigon.com"},{"name":"meaku","email":"michael.jaser@peerigon.com"},{"name":"moritzjacobs","email":"mail@moritzjacobs.de"}],"directories":{},"publish_time":1401063473109,"_cnpm_publish_time":1401063473109,"_hasShrinkwrap":false}},"readme":"phridge\n=======\n**A bridge between [node](http://nodejs.org/) and [PhantomJS](http://phantomjs.org/).**\n\n[![](https://img.shields.io/npm/v/phridge.svg)](https://www.npmjs.com/package/phridge)\n[![](https://img.shields.io/npm/dm/phridge.svg)](https://www.npmjs.com/package/phridge)\n[![Dependency Status](https://david-dm.org/peerigon/phridge.svg)](https://david-dm.org/peerigon/phridge)\n[![Build Status](https://travis-ci.org/peerigon/phridge.svg?branch=master)](https://travis-ci.org/peerigon/phridge)\n[![Coverage Status](https://img.shields.io/coveralls/peerigon/phridge.svg)](https://Coveralls.io/r/peerigon/phridge?branch=master)\n\nWorking with PhantomJS in node is a bit cumbersome since you need to spawn a new PhantomJS process for every single task. However, spawning a new process is quite expensive and thus can slow down your application significantly.\n\nphridge provides an api to easily\n\n- spawn new PhantomJS processes\n- run functions with arguments inside PhantomJS\n- return results from PhantomJS to node\n- manage long-running PhantomJS instances\n\nUnlike other node-PhantomJS bridges phridge provides a way to run code directly inside PhantomJS instead of turning every call and assignment into an async operation.\n\nphridge uses PhantomJS' stdin and stdout for [inter-process communication](http://en.wikipedia.org/wiki/Inter-process_communication). It stringifies the given function, passes it to PhantomJS via stdin, executes it in the PhantomJS environment and passes back the results via stdout. Thus you can write your PhantomJS scripts inside your node modules in a clean and synchronous way.\n\nInstead of ...\n\n```javascript\nphantom.addCookie(\"cookie_name\", \"cookie_value\", \"localhost\", function () {\n    phantom.createPage(function (page) {\n        page.set(\"customHeaders.Referer\", \"http://google.com\", function () {\n            page.set(\n                \"settings.userAgent\",\n                \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5)\",\n                function () {\n                    page.open(\"http://localhost:9901/cookie\", function (status) {\n                        page.evaluate(function (selector) {\n                            return document.querySelector(selector).innerText;\n                        }, function (text) {\n                            console.log(\"The element contains the following text: \"+ text)\n                        }, \"h1\");\n                    });\n                }\n            );\n        });\n    });\n});\n```\n\n... you can write ...\n\n```javascript\n// node\nphantom.run(\"h1\", function (selector, resolve) {\n    // this code runs inside PhantomJS\n\n    phantom.addCookie(\"cookie_name\", \"cookie_value\", \"localhost\");\n\n    var page = webpage.create();\n    page.customHeaders = {\n        Referer: \"http://google.com\"\n    };\n    page.settings = {\n        userAgent: \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5)\"\n    };\n    page.open(\"http://www.google.com\", function () {\n        var text = page.evaluate(function (selector) {\n            return document.querySelector(selector).innerText;\n        }, selector);\n\n        // resolve the promise and pass 'text' back to node \n        resolve(text);\n    });\n}).then(function (text) {\n    // inside node again\n    console.log(\"The element contains the following text: \" + text);\n});\n```\n\nPlease note that the `phantom`-object provided by phridge is completely different to the `phantom`-object inside PhantomJS. So is the `page`-object. [Check out the api](#api-phantom) for further information.\n\n<br />\n\nInstallation\n------------------------------------------------------------------------\n\n`npm install phridge`\n\n<br />\n\nExamples\n------------------------------------------------------------------------\n\n### Spawn a new PhantomJS process\n\n```javascript\nphridge.spawn({\n    proxyAuth: \"john:1234\",\n    loadImages: false,\n    // passing CLI-style options does also work\n    \"--remote-debugger-port\": 8888\n}).then(function (phantom) {\n    // phantom is now a reference to a specific PhantomJS process\n});\n```\n\n`phridge.spawn()` takes an object which will be passed as config to PhantomJS. Check out [their documentation](http://phantomjs.org/api/command-line.html) for a detailed overview of options. CLI-style options are added as they are, so be sure to escape the space character.\n\n*Please note: There are [known issues](https://github.com/peerigon/phridge/issues/31) of PhantomJS that some config options are only supported in CLI-style.*\n\n### Run any function inside PhantomJS\n\n```javascript\nphantom.run(function () {\n    console.log(\"Hi from PhantomJS\");\n});\n```\n\nphridge stringifies the given function, sends it to PhantomJS and evals it again. Hence you can't use scope variables:\n\n```javascript\nvar someVar = \"hi\";\n\nphantom.run(function () {\n    console.log(someVar); // throws a ReferenceError\n});\n```\n\n### Passing arguments\n\nYou can also pass arguments to the PhantomJS process:\n\n```javascript\nphantom.run(\"hi\", 2, {}, function (string, number, object) {\n    console.log(string, number, object); // 'hi', 2, [object Object]\n});\n```\n\nArguments are stringified by `JSON.stringify()`, so be sure to use JSON-valid objects.\n\n### Returning results\n\nThe given function can run sync and async. However, the `run()` method itself will always run async as it needs to wait for the process to respond.\n\n**Sync**\n\n```javascript\nphantom.run(function () {\n    return Math.PI;\n}).then(function (pi) {\n    console.log(pi === Math.PI); // true\n});\n```\n\n**Async**\n\n```javascript\nphantom.run(function (resolve) {\n    setTimeout(function () {\n        resolve(\"after 500 ms\");\n    }, 500);\n}).then(function (msg) {\n    console.log(msg); // 'after 500 ms'\n});\n```\n\nResults are also stringified by `JSON.stringify()`, so returning application objects with functions won't work.\n\n```javascript\nphantom.run(function () {\n    ...\n    // doesn't work because page is not a JSON-valid object\n    return page;\n});\n```\n\n### Returning errors\n\nErrors can be returned by using the `throw` keyword or by calling the `reject` function. Both ways will reject the promise returned by `run()`.\n\n**Sync**\n\n```javascript\nphantom.run(function () {\n    throw new Error(\"An unknown error occured\");\n}).catch(function (err) {\n    console.log(err); // 'An unknown error occured'\n});\n```\n\n**Async**\n\n```javascript\nphantom.run(function (resolve, reject) {\n    setTimeout(function () {\n        reject(new Error(\"An unknown error occured\"));\n    }, 500);\n}).catch(function (err) {\n    console.log(err); // 'An unknown error occured'\n});\n```\n\n### Async methods with arguments\n\n`resolve` and `reject` are just appended to the regular arguments:\n\n```javascript\nphantom.run(1, 2, 3, function (one, two, three, resolve, reject) {\n\n});\n```\n\n### Persisting states inside PhantomJS\n\nSince the function passed to `phantom.run()` can't declare variables in the global scope, it is impossible to maintain state in PhantomJS. That's why `phantom.run()` calls all functions on the same context object. Thus you can easily store state variables.\n\n```javascript\nphantom.run(function () {\n    this.message = \"Hello from the first call\";\n}).then(function () {\n    phantom.run(function () {\n        console.log(this.message); // 'Hello from the first call'\n    });\n});\n```\n\nFor further convenience all PhantomJS modules are already available in the global scope.\n\n```javascript\nphantom.run(function () {\n    console.log(webpage);           // [object Object]\n    console.log(system);            // [object Object]\n    console.log(fs);                // [object Object]\n    console.log(webserver);         // [object Object]\n    console.log(child_process);     // [object Object]\n});\n```\n\n### Working in a page context\n\nMost of the time its more useful to work in a specific webpage context. This is done by creating a Page via `phantom.createPage()` which calls internally `require(\"webpage\").create()`. The returned page wrapper will then execute all functions bound to a PhantomJS [webpage instance](http://phantomjs.org/api/webpage/). \n\n```javascript\nvar page = phantom.createPage();\n\npage.run(function (resolve, reject) {\n    // `this` is now a webpage instance\n    this.open(\"http://example.com\", function (status) {\n        if (status !== \"success\") {\n            return reject(new Error(\"Cannot load \" + this.url));\n        }\n        resolve();\n    });\n});\n```\n\nAnd for the busy ones: You can just call `phantom.openPage(url)` which is basically the same as above:\n\n```javascript\nphantom.openPage(\"http://example.com\").then(function (page) {\n    console.log(\"Example loaded\");\n});\n``` \n\n### Cleaning up\n\nIf you don't need a particular page anymore, just call:\n\n```javascript\npage.dispose().then(function () {\n    console.log(\"page disposed\");\n});\n```\n\nThis will clean up all page references inside PhantomJS.\n\nIf you don't need the whole process anymore call\n\n```javascript\nphantom.dispose().then(function () {\n    console.log(\"process terminated\");\n});\n```\n\nwhich will terminate the process cleanly by calling `phantom.exit(0)` internally. You don't need to dispose all pages manuallly when you call `phantom.dispose()`.\n\nHowever, calling\n\n```javascript\nphridge.disposeAll().then(function () {\n    console.log(\"All processes created by phridge.spawn() have been terminated\");\n});\n```\n\nwill terminate all processes.\n\n**I strongly recommend to call** `phridge.disposeAll()` **when the node process exits as this is the only way to ensure that all child processes terminate as well.** Since `disposeAll()` is async it is not safe to call it on `process.on(\"exit\")`. It is better to call it on `SIGINT`, `SIGTERM` and within your regular exit flow.\n\n<br />\n\nAPI\n----\n\n### phridge\n\n#### .spawn(config?): Promise → Phantom\n\nSpawns a new PhantomJS process with the given config. [Read the PhantomJS documentation](http://phantomjs.org/api/command-line.html) for all available config options. Use camelCase style for option names. The promise will be fulfilled with an instance of `Phantom`.\n\n#### .disposeAll(): Promise\n\nTerminates all PhantomJS processes that have been spawned. The promise will be fulfilled when all child processes emitted an `exit`-event.\n\n#### .config.stdout: Stream = process.stdout\n\nDestination stream where PhantomJS' [clean stdout](#phantom-childprocess-cleanstdout) will be piped to. Set it `null` if you don't want it. Changing the value does not affect processes that have already been spawned.\n\n#### .config.stderr: Stream = process.stderr\n\nDestination stream where PhantomJS' stderr will be piped to. Set it `null` if you don't want it. Changing the value does not affect processes that have already been spawned.\n\n----\n\n### <a name=\"api-phantom\"></a>Phantom.prototype\n\n#### .childProcess: ChildProcess\n\nA reference to the [ChildProcess](http://nodejs.org/api/child_process.html#child_process_class_childprocess)-instance.\n\n#### <a name=\"phantom-childprocess-cleanstdout\"></a> .childProcess.cleanStdout: ReadableStream\n\nphridge extends the [ChildProcess](http://nodejs.org/api/child_process.html#child_process_class_childprocess)-instance by a new stream called `cleanStdout`. This stream is piped to `process.stdout` by default. It provides all data not dedicated to phridge. Streaming data is considered to be dedicated to phridge when the new line is preceded by the classifier string `\"message to node: \"`.\n\n#### <a name=\"phantom-run\"></a>.run(args..., fn): Promise → *\n\nStringifies `fn`, sends it to PhantomJS and executes it there again. `args...` are stringified using `JSON.stringify()` and passed to `fn` again. `fn` may simply `return` a result or `throw` an error or call `resolve()` or `reject()` respectively if it is asynchronous. phridge compares `fn.length` with the given number of arguments to determine whether `fn` is sync or async. The returned promise will be resolved with the result or rejected with the error.\n\n#### .createPage(): Page\n\nCreates a wrapper to execute code in the context of a specific [PhantomJS webpage](http://phantomjs.org/api/webpage/).\n\n#### .openPage(url): Promise → Page\n\nCalls `phantom.createPage()`, then `page.open(url, cb)` inside PhantomJS and resolves when `cb` is called. If the returned `status` is not `\"success\"` the promise will be rejected.\n\n#### .dispose(): Promise\n\nCalls `phantom.exit(0)` inside PhantomJS and resolves when the child process emits an `exit`-event.\n\n### Events\n\n#### unexpectedExit\n\nWill be emitted when PhantomJS exited without a call to `phantom.dispose()` or one of its std streams emitted an `error` event. This event may be fired on some OS when the process group receives a `SIGINT` or `SIGTERM` (see [#35](https://github.com/peerigon/phridge/pull/35)).\n\nWhen an `unexpectedExit` event is encountered, the `phantom` instance will be unusable and therefore automatically disposed. Usually you don't need to listen for this event.\n\n---\n\n### Page.prototype\n\n#### .phantom: Phantom\n\nA reference to the parent [`Phantom`](#api-phantom) instance.\n\n#### .run(args..., fn): Promise → *\n\nCalls `fn` on the context of a PhantomJS page object. See [`phantom.run()`](#phantom-run) for further information.\n\n#### .dispose(): Promise\n\nCleans up this page instance by calling `page.close()`\n\n<br />\n\nContributing\n------------------------------------------------------------------------\n\nFrom opening a bug report to creating a pull request: **every contribution is appreciated and welcome**. If you're planing to implement a new feature or change the api please create an issue first. This way we can ensure that your precious work is not in vain.\n\nAll pull requests should have 100% test coverage (with notable exceptions) and need to pass all tests.\n\n- Call `npm test` to run the unit tests\n- Call `npm run coverage` to check the test coverage (using [istanbul](https://github.com/gotwarlost/istanbul))  \n\n<br />\n\nLicense\n------------------------------------------------------------------------\n\nUnlicense\n","_attachments":{},"homepage":"https://github.com/peerigon/phridge#readme","bugs":{"url":"https://github.com/peerigon/phridge/issues"},"license":"Unlicense"}