UNPKG

5.13 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.8.0
2var ConnectApp, connect, es, fs, http, https, liveReload, lr, opt, path, server, tiny_lr, util;
3
4path = require("path");
5
6es = require("event-stream");
7
8util = require("gulp-util");
9
10http = require("http");
11
12https = require("https");
13
14fs = require("fs");
15
16connect = require("connect");
17
18liveReload = require("connect-livereload");
19
20tiny_lr = require("tiny-lr");
21
22opt = {};
23
24server = void 0;
25
26lr = void 0;
27
28ConnectApp = (function() {
29 function ConnectApp(options) {
30 opt = options;
31 opt.port = opt.port || "8080";
32 opt.root = opt.root || path.dirname(module.parent.id);
33 opt.host = opt.host || "localhost";
34 if (opt.open) {
35 this.oldMethod("open");
36 }
37 this.server();
38 }
39
40 ConnectApp.prototype.server = function() {
41 var app;
42 app = connect();
43 this.middleware().forEach(function(middleware) {
44 return app.use(middleware);
45 });
46 if (opt.https != null) {
47 server = https.createServer({
48 key: opt.https.key || fs.readFileSync(__dirname + '/certs/server.key'),
49 cert: opt.https.cert || fs.readFileSync(__dirname + '/certs/server.crt'),
50 ca: opt.https.ca || fs.readFileSync(__dirname + '/certs/ca.crt'),
51 passphrase: opt.https.passphrase || 'gulp'
52 }, app);
53 } else {
54 server = http.createServer(app);
55 }
56 app.use(connect.directory(typeof opt.root === "object" ? opt.root[0] : opt.root));
57 return server.listen(opt.port, (function(_this) {
58 return function(err) {
59 var sockets, stopServer, stoped;
60 if (err) {
61 return _this.log("Error on starting server: " + err);
62 } else {
63 _this.log("Server started http://" + opt.host + ":" + opt.port);
64 stoped = false;
65 sockets = [];
66 server.on('close', function() {
67 if (!stoped) {
68 stoped = true;
69 return _this.log("Server stopped");
70 }
71 });
72 server.on("connection", function(socket) {
73 sockets.push(socket);
74 return socket.on("close", function() {
75 return sockets.splice(sockets.indexOf(socket), 1);
76 });
77 });
78 stopServer = function() {
79 if (!stoped) {
80 sockets.forEach(function(socket) {
81 return socket.destroy();
82 });
83 server.close();
84 return process.nextTick(function() {
85 return process.exit(0);
86 });
87 }
88 };
89 process.on("SIGINT", stopServer);
90 process.on("exit", stopServer);
91 if (opt.livereload) {
92 tiny_lr.Server.prototype.error = function() {};
93 if (opt.https != null) {
94 lr = tiny_lr({
95 key: opt.https.key || fs.readFileSync(__dirname + '/certs/server.key'),
96 cert: opt.https.cert || fs.readFileSync(__dirname + '/certs/server.crt')
97 });
98 } else {
99 lr = tiny_lr();
100 }
101 lr.listen(opt.livereload.port);
102 return _this.log("LiveReload started on port " + opt.livereload.port);
103 }
104 }
105 };
106 })(this));
107 };
108
109 ConnectApp.prototype.middleware = function() {
110 var middleware;
111 middleware = opt.middleware ? opt.middleware.call(this, connect, opt) : [];
112 if (opt.livereload) {
113 if (typeof opt.livereload === "boolean") {
114 opt.livereload = {};
115 }
116 if (!opt.livereload.port) {
117 opt.livereload.port = 35729;
118 }
119 middleware.push(liveReload({
120 port: opt.livereload.port
121 }));
122 }
123 if (typeof opt.root === "object") {
124 opt.root.forEach(function(path) {
125 return middleware.push(connect["static"](path));
126 });
127 } else {
128 middleware.push(connect["static"](opt.root));
129 }
130 if (opt.fallback) {
131 middleware.push(function(req, res) {
132 return require('fs').createReadStream(opt.fallback).pipe(res);
133 });
134 }
135 return middleware;
136 };
137
138 ConnectApp.prototype.log = function(text) {
139 this.text = text;
140 if (!opt.silent) {
141 return util.log(util.colors.green(this.text));
142 }
143 };
144
145 ConnectApp.prototype.logWarning = function(text) {
146 this.text = text;
147 if (!opt.silent) {
148 return util.log(util.colors.yellow(this.text));
149 }
150 };
151
152 ConnectApp.prototype.oldMethod = function(type) {
153 var text;
154 text = 'does not work in gulp-connect v 2.*. Please read "readme" https://github.com/AveVlad/gulp-connect';
155 switch (type) {
156 case "open":
157 return this.logWarning("Option open " + text);
158 }
159 };
160
161 return ConnectApp;
162
163})();
164
165module.exports = {
166 server: function(options) {
167 if (options == null) {
168 options = {};
169 }
170 return new ConnectApp(options);
171 },
172 reload: function() {
173 return es.map(function(file, callback) {
174 if (opt.livereload && typeof lr === "object") {
175 lr.changed({
176 body: {
177 files: file.path
178 }
179 });
180 }
181 return callback(null, file);
182 });
183 },
184 serverClose: function() {
185 return server.close();
186 }
187};