wapplr 1.0.46 → 1.0.50

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.
@@ -44,22 +44,35 @@ function createDefaultContentManager() {
44
44
  contents = contentManager.contents;
45
45
  content = contentName && contents[contentName] ? (0, _objectSpread2["default"])({}, contents[contentName]) : null;
46
46
 
47
- if (!(content && content.request)) {
47
+ if (!contentManager.firstRequest) {
48
48
  _context.next = 8;
49
49
  break;
50
50
  }
51
51
 
52
52
  _context.next = 8;
53
- return content.request({
53
+ return contentManager.firstRequest({
54
54
  wapp: wapp,
55
55
  req: req,
56
56
  res: res
57
57
  });
58
58
 
59
59
  case 8:
60
+ if (!(content && content.request)) {
61
+ _context.next = 11;
62
+ break;
63
+ }
64
+
65
+ _context.next = 11;
66
+ return content.request({
67
+ wapp: wapp,
68
+ req: req,
69
+ res: res
70
+ });
71
+
72
+ case 11:
60
73
  return _context.abrupt("return", content);
61
74
 
62
- case 9:
75
+ case 12:
63
76
  case "end":
64
77
  return _context.stop();
65
78
  }
@@ -211,6 +224,9 @@ function createDefaultContentManager() {
211
224
  }),
212
225
  getComponent: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _utils.defaultDescriptor), {}, {
213
226
  value: defaultGetComponent
227
+ }),
228
+ firstRequest: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _utils.defaultDescriptor), {}, {
229
+ value: null
214
230
  })
215
231
  });
216
232
  return contentManager;
@@ -30,7 +30,7 @@ function html(_ref) {
30
30
  _config$appStyle = config.appStyle,
31
31
  appStyle = _config$appStyle === void 0 ? style : _config$appStyle;
32
32
  var _res$wappResponse = res.wappResponse,
33
- state = _res$wappResponse.state,
33
+ store = _res$wappResponse.store,
34
34
  _res$wappResponse$con = _res$wappResponse.content,
35
35
  content = _res$wappResponse$con === void 0 ? {} : _res$wappResponse$con,
36
36
  _res$wappResponse$sta = _res$wappResponse.statusCode,
@@ -39,6 +39,7 @@ function html(_ref) {
39
39
  containerElementId = _res$wappResponse$con2 === void 0 ? "app" : _res$wappResponse$con2,
40
40
  _res$wappResponse$app = _res$wappResponse.appStateName,
41
41
  appStateName = _res$wappResponse$app === void 0 ? "APP_STATE" : _res$wappResponse$app;
42
+ var state = store ? store.getState() : {};
42
43
  var _content$render = content.render,
43
44
  render = _content$render === void 0 ? "" : _content$render,
44
45
  _content$title = content.title,
@@ -9,6 +9,82 @@ var fs = require("fs");
9
9
 
10
10
  var path = require("path");
11
11
 
12
+ function destroy(stream) {
13
+ if (!(stream !== null && stream !== void 0 && stream.__destroyed)) {
14
+ stream.destroy();
15
+ stream.__destroyed = true;
16
+
17
+ if (typeof stream.close === "function") {
18
+ stream.on("open", function onOpenClose() {
19
+ if (typeof this.fd === "number") {
20
+ this.close();
21
+ }
22
+ });
23
+ }
24
+ }
25
+
26
+ return stream;
27
+ }
28
+
29
+ function endStream(req, res, stream) {
30
+ if (req.__onFinishedRemoveListener) {
31
+ req.__onFinishedRemoveListener();
32
+
33
+ req.__onFinishedRemoveListener = null;
34
+ }
35
+
36
+ if (res.__onFinishedRemoveListener) {
37
+ res.__onFinishedRemoveListener();
38
+
39
+ res.__onFinishedRemoveListener = null;
40
+ }
41
+
42
+ destroy(stream);
43
+ }
44
+
45
+ function onFinished(req, res, callback) {
46
+ function isFinishedResponse() {
47
+ var socket = res.socket;
48
+
49
+ if (typeof res.finished === "boolean") {
50
+ return Boolean(res.finished || socket && !socket.writable);
51
+ }
52
+ }
53
+
54
+ function isFinishedRequest() {
55
+ var socket = req.socket;
56
+
57
+ if (typeof req.complete === "boolean") {
58
+ return Boolean(req.upgrade || !socket || !socket.readable || req.complete && !req.readable);
59
+ }
60
+ }
61
+
62
+ function removeListener() {
63
+ if (req.__onFinishedInterval) {
64
+ console.log("remove listener", req.path);
65
+ clearInterval(req.__onFinishedInterval);
66
+ req.__onFinishedInterval = 0;
67
+ }
68
+
69
+ if (res.__onFinishedInterval) {
70
+ clearInterval(res.__onFinishedInterval);
71
+ res.__onFinishedInterval = 0;
72
+ }
73
+ }
74
+
75
+ function listener() {
76
+ var result = isFinishedRequest() || isFinishedResponse();
77
+
78
+ if (result) {
79
+ removeListener();
80
+ callback();
81
+ }
82
+ }
83
+
84
+ req.__onFinishedInterval = res.__onFinishedInterval = setInterval(listener, 100);
85
+ req.__onFinishedRemoveListener = res.__onFinishedRemoveListener = removeListener;
86
+ }
87
+
12
88
  function serveStatic(publicPath) {
13
89
  return function staticMiddleware(req, res, next) {
14
90
  var parsedUrl = {
@@ -28,6 +104,8 @@ function serveStatic(publicPath) {
28
104
  return next();
29
105
  }
30
106
 
107
+ var stream;
108
+
31
109
  try {
32
110
  var data = fs.readFileSync(pathname);
33
111
  var stats = fs.statSync(pathname);
@@ -37,8 +115,15 @@ function serveStatic(publicPath) {
37
115
  stats: stats,
38
116
  parsedPath: paredSanitizePath
39
117
  };
40
- var stream = fs.createReadStream(pathname);
118
+ stream = fs.createReadStream(pathname);
119
+ onFinished(req, res, function () {
120
+ endStream(req, res, stream);
121
+ });
122
+ stream.on("close", function onopen() {
123
+ endStream(req, res, stream);
124
+ });
41
125
  stream.on("error", function onerror(err) {
126
+ endStream(req, res, stream);
42
127
  res.wappResponse.status(err.statusCode || 500, err);
43
128
  res.wapp.log(err, req, res);
44
129
  next(err);
@@ -50,6 +135,7 @@ function serveStatic(publicPath) {
50
135
  });
51
136
  });
52
137
  } catch (err) {
138
+ endStream(req, res, stream);
53
139
  res.wappResponse.status(err.statusCode || 500, err);
54
140
  res.wapp.log(err, req, res);
55
141
  next(err);
package/package.json CHANGED
@@ -22,7 +22,7 @@
22
22
  "files": [
23
23
  "dist/*"
24
24
  ],
25
- "version": "1.0.46",
25
+ "version": "1.0.50",
26
26
  "main": "dist/server",
27
27
  "browser": "dist/client",
28
28
  "repository": {