wapplr 1.0.49 → 1.0.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -78,9 +78,7 @@ function createClient() {
78
78
  search: window.location.search,
79
79
  hash: window.location.hash
80
80
  },
81
- state: {
82
- key: 0
83
- }
81
+ state: window.history.state
84
82
  }
85
83
  }, {}, function out() {
86
84
  var globals = wapp.globals;
@@ -71,9 +71,7 @@ function createHistoryManager() {
71
71
  state.key = state.key || createKey();
72
72
  history.runListeners({
73
73
  action: "POP",
74
- location: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, newLocation), {}, {
75
- key: state.key
76
- }),
74
+ location: (0, _objectSpread2["default"])({}, newLocation),
77
75
  state: state
78
76
  });
79
77
  }
@@ -139,9 +137,7 @@ function createHistoryManager() {
139
137
  globalHistory.pushState(state, "", url);
140
138
  history.runListeners({
141
139
  action: "PUSH",
142
- location: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, newLocation), {}, {
143
- key: state.key
144
- }),
140
+ location: (0, _objectSpread2["default"])({}, newLocation),
145
141
  state: state
146
142
  });
147
143
  }
@@ -171,9 +167,6 @@ function createHistoryManager() {
171
167
  enumerable: false,
172
168
  value: defaultGetState
173
169
  }),
174
- key: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _utils.defaultDescriptor), {}, {
175
- value: "initial"
176
- }),
177
170
  listeners: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _utils.defaultDescriptor), {}, {
178
171
  enumerable: false,
179
172
  value: {}
@@ -13,6 +13,8 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
13
13
 
14
14
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
15
 
16
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
17
+
16
18
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
19
 
18
20
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -165,6 +167,32 @@ function createServer() {
165
167
  httpServer.listen(port, function () {
166
168
  console.log("The server is running at http://localhost:".concat(port, "/"));
167
169
  });
170
+ httpServer.__sockets = new Set();
171
+ httpServer.on("connection", function (socket) {
172
+ httpServer.__sockets.add(socket);
173
+
174
+ socket.on("close", function () {
175
+ httpServer.__sockets["delete"](socket);
176
+ });
177
+ });
178
+
179
+ httpServer.__destroySockets = function () {
180
+ var sockets = httpServer.__sockets;
181
+
182
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(sockets.values()),
183
+ _step;
184
+
185
+ try {
186
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
187
+ var socket = _step.value;
188
+ socket.destroy();
189
+ }
190
+ } catch (err) {
191
+ _iterator.e(err);
192
+ } finally {
193
+ _iterator.f();
194
+ }
195
+ };
168
196
  }
169
197
 
170
198
  if (key && cert && portSSL) {
@@ -180,6 +208,32 @@ function createServer() {
180
208
  httpsServer.listen(portSSL, function () {
181
209
  console.log("The server is running at https://localhost:".concat(portSSL, "/ with HTTP2 protocol"));
182
210
  });
211
+ httpsServer.__sockets = new Set();
212
+ httpsServer.on("connection", function (socket) {
213
+ httpsServer.__sockets.add(socket);
214
+
215
+ socket.on("close", function () {
216
+ httpsServer.__sockets["delete"](socket);
217
+ });
218
+ });
219
+
220
+ httpsServer.__destroySockets = function () {
221
+ var sockets = httpsServer.__sockets;
222
+
223
+ var _iterator2 = (0, _createForOfIteratorHelper2["default"])(sockets.values()),
224
+ _step2;
225
+
226
+ try {
227
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
228
+ var socket = _step2.value;
229
+ socket.destroy();
230
+ }
231
+ } catch (err) {
232
+ _iterator2.e(err);
233
+ } finally {
234
+ _iterator2.f();
235
+ }
236
+ };
183
237
  }
184
238
  }
185
239
 
@@ -196,6 +250,8 @@ function createServer() {
196
250
  });
197
251
  var closed = 0;
198
252
  shouldClose.forEach(function (httpServer) {
253
+ httpServer.__destroySockets();
254
+
199
255
  httpServer.close(function () {
200
256
  closed = closed + 1;
201
257
  servers[port] = null;
@@ -3,12 +3,104 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.endStream = endStream;
7
+ exports.addCloseEventsForReadableStream = addCloseEventsForReadableStream;
6
8
  exports["default"] = serveStatic;
7
9
 
8
10
  var fs = require("fs");
9
11
 
10
12
  var path = require("path");
11
13
 
14
+ function destroy(stream) {
15
+ if (!(stream !== null && stream !== void 0 && stream.__destroyed)) {
16
+ stream.destroy();
17
+ stream.__destroyed = true;
18
+
19
+ if (typeof stream.close === "function") {
20
+ stream.on("open", function onOpenClose() {
21
+ if (typeof this.fd === "number") {
22
+ this.close();
23
+ }
24
+ });
25
+ }
26
+ }
27
+
28
+ return stream;
29
+ }
30
+
31
+ function onFinished(req, res, callback) {
32
+ function isFinishedResponse() {
33
+ var socket = res.socket;
34
+
35
+ if (typeof res.finished === "boolean") {
36
+ return Boolean(res.finished || res.writableEnded || socket && !socket.writable);
37
+ }
38
+ }
39
+
40
+ function isFinishedRequest() {
41
+ var socket = req.socket;
42
+
43
+ if (typeof req.complete === "boolean") {
44
+ return Boolean(req.upgrade || !socket || !socket.readable || req.complete && !req.readable);
45
+ }
46
+ }
47
+
48
+ function removeListener() {
49
+ if (req.__onFinishedInterval) {
50
+ clearInterval(req.__onFinishedInterval);
51
+ req.__onFinishedInterval = 0;
52
+ }
53
+
54
+ if (res.__onFinishedInterval) {
55
+ clearInterval(res.__onFinishedInterval);
56
+ res.__onFinishedInterval = 0;
57
+ }
58
+ }
59
+
60
+ function listener() {
61
+ var result = isFinishedRequest() || isFinishedResponse();
62
+
63
+ if (result) {
64
+ removeListener();
65
+ callback();
66
+ }
67
+ }
68
+
69
+ req.__onFinishedInterval = res.__onFinishedInterval = setInterval(listener, 100);
70
+ req.__onFinishedRemoveListener = res.__onFinishedRemoveListener = removeListener;
71
+ }
72
+
73
+ function endStream(req, res, stream) {
74
+ if (req.__onFinishedRemoveListener) {
75
+ req.__onFinishedRemoveListener();
76
+
77
+ req.__onFinishedRemoveListener = null;
78
+ }
79
+
80
+ if (res.__onFinishedRemoveListener) {
81
+ res.__onFinishedRemoveListener();
82
+
83
+ res.__onFinishedRemoveListener = null;
84
+ }
85
+
86
+ destroy(stream);
87
+ }
88
+
89
+ function addCloseEventsForReadableStream(req, res, stream) {
90
+ req.on("close", function () {
91
+ endStream(req, res, stream);
92
+ });
93
+ req.connection.on("close", function () {
94
+ endStream(req, res, stream);
95
+ });
96
+ onFinished(req, res, function () {
97
+ endStream(req, res, stream);
98
+ });
99
+ stream.on("close", function onclose() {
100
+ endStream(req, res, stream);
101
+ });
102
+ }
103
+
12
104
  function serveStatic(publicPath) {
13
105
  return function staticMiddleware(req, res, next) {
14
106
  var parsedUrl = {
@@ -21,13 +113,15 @@ function serveStatic(publicPath) {
21
113
 
22
114
  var sanitizePath = path.normalize(parsedUrl.pathname).replace(/^(\.\.[\/\\])+/, "");
23
115
  var pathname = path.join(publicPath, sanitizePath);
24
- var paredSanitizePath = path.parse(pathname);
25
- var ext = paredSanitizePath.ext;
116
+ var parsedSanitizePath = path.parse(pathname);
117
+ var ext = parsedSanitizePath.ext;
26
118
 
27
119
  if (!fs.existsSync(pathname) || !ext) {
28
120
  return next();
29
121
  }
30
122
 
123
+ var stream;
124
+
31
125
  try {
32
126
  var data = fs.readFileSync(pathname);
33
127
  var stats = fs.statSync(pathname);
@@ -35,10 +129,12 @@ function serveStatic(publicPath) {
35
129
  res.wappResponse.sendData = {
36
130
  data: data,
37
131
  stats: stats,
38
- parsedPath: paredSanitizePath
132
+ parsedPath: parsedSanitizePath
39
133
  };
40
- var stream = fs.createReadStream(pathname);
134
+ stream = fs.createReadStream(pathname);
135
+ addCloseEventsForReadableStream(req, res, stream);
41
136
  stream.on("error", function onerror(err) {
137
+ endStream(req, res, stream);
42
138
  res.wappResponse.status(err.statusCode || 500, err);
43
139
  res.wapp.log(err, req, res);
44
140
  next(err);
@@ -50,6 +146,7 @@ function serveStatic(publicPath) {
50
146
  });
51
147
  });
52
148
  } catch (err) {
149
+ endStream(req, res, stream);
53
150
  res.wappResponse.status(err.statusCode || 500, err);
54
151
  res.wapp.log(err, req, res);
55
152
  next(err);
package/package.json CHANGED
@@ -22,7 +22,7 @@
22
22
  "files": [
23
23
  "dist/*"
24
24
  ],
25
- "version": "1.0.49",
25
+ "version": "1.0.53",
26
26
  "main": "dist/server",
27
27
  "browser": "dist/client",
28
28
  "repository": {