1 |
|
2 | var ConnectApp, connect, es, fs, http, https, liveReload, lr, opt, path, server, tiny_lr, util;
|
3 |
|
4 | path = require("path");
|
5 |
|
6 | es = require("event-stream");
|
7 |
|
8 | util = require("gulp-util");
|
9 |
|
10 | http = require("http");
|
11 |
|
12 | https = require("https");
|
13 |
|
14 | fs = require("fs");
|
15 |
|
16 | connect = require("connect");
|
17 |
|
18 | liveReload = require("connect-livereload");
|
19 |
|
20 | tiny_lr = require("tiny-lr");
|
21 |
|
22 | opt = {};
|
23 |
|
24 | server = void 0;
|
25 |
|
26 | lr = void 0;
|
27 |
|
28 | ConnectApp = (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 |
|
165 | module.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 | };
|