core-express 0.1.0 → 0.1.1

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.
package/lib/log.js ADDED
@@ -0,0 +1,242 @@
1
+ "use strict"
2
+ Object.defineProperty(exports, "__esModule", { value: true })
3
+ var stream_1 = require("stream")
4
+ var resources_1 = require("./resources")
5
+ function createConfig(c) {
6
+ if (!c) {
7
+ return { skips: [], duration: "duration", request: "", response: "", status: "", size: "" }
8
+ }
9
+ var l = {
10
+ log: c.log,
11
+ separate: c.separate,
12
+ skips: c.skips ? c.skips.split(",") : [],
13
+ duration: c.duration ? c.duration : "duration",
14
+ request: c.request ? c.request : "",
15
+ response: c.response ? c.response : "",
16
+ status: c.status ? c.status : "",
17
+ size: c.size ? c.size : "",
18
+ }
19
+ return l
20
+ }
21
+ exports.createConfig = createConfig
22
+ function skip(skips, url) {
23
+ if (skips.length === 0) {
24
+ return false
25
+ }
26
+ var u = removeUrlParams(url)
27
+ for (var _i = 0, skips_1 = skips; _i < skips_1.length; _i++) {
28
+ var s = skips_1[_i]
29
+ if (u.endsWith(s)) {
30
+ return true
31
+ }
32
+ }
33
+ return false
34
+ }
35
+ exports.skip = skip
36
+ function removeUrlParams(url) {
37
+ var startParams = url.indexOf("?")
38
+ return startParams !== -1 ? url.substring(0, startParams) : url
39
+ }
40
+ exports.removeUrlParams = removeUrlParams
41
+ var o = "OPTIONS"
42
+ var MiddlewareLogger = (function () {
43
+ function MiddlewareLogger(write, conf, build) {
44
+ this.write = write
45
+ this.build = build
46
+ this.log = this.log.bind(this)
47
+ this.conf = createConfig(conf)
48
+ }
49
+ MiddlewareLogger.prototype.log = function (req, res, next) {
50
+ var _this = this
51
+ var m = req.method
52
+ if (m !== o && this.conf.log && !skip(this.conf.skips, req.originalUrl)) {
53
+ var start_1 = process.hrtime()
54
+ var x_1 = this.conf.request
55
+ var r_1 = false
56
+ if (m !== "GET" && m !== "DELETE") {
57
+ r_1 = true
58
+ }
59
+ var msg_1 = m + " " + req.originalUrl
60
+ if (this.conf.separate && r_1) {
61
+ if (this.conf.request.length > 0) {
62
+ var op = {}
63
+ op[x_1] = JSON.stringify(req.body)
64
+ if (this.build) {
65
+ var op2 = this.build(req, op)
66
+ this.write(msg_1, op2)
67
+ } else {
68
+ this.write(msg_1, op)
69
+ }
70
+ }
71
+ }
72
+ var chunks_1 = []
73
+ mapResponseBody(res, chunks_1)
74
+ res.on("finish", function () {
75
+ var duration = getDurationInMilliseconds(start_1)
76
+ var op = {}
77
+ if (r_1 && !_this.conf.separate && _this.conf.request.length > 0) {
78
+ op[x_1] = JSON.stringify(req.body)
79
+ }
80
+ if (_this.conf.response.length > 0) {
81
+ var rsBody = Buffer.concat(chunks_1).toString(resources_1.resources.encoding)
82
+ op[_this.conf.response] = rsBody
83
+ }
84
+ if (_this.conf.status.length > 0) {
85
+ op[_this.conf.status] = res.statusCode
86
+ }
87
+ if (_this.conf.size.length > 0) {
88
+ if ("_contentLength" in res) {
89
+ op[_this.conf.size] = res["_contentLength"]
90
+ } else if (res.hasHeader("content-length")) {
91
+ var l = res.getHeader("content-length")
92
+ if (typeof l === "number" || typeof l === "string") {
93
+ op[_this.conf.size] = l
94
+ }
95
+ }
96
+ }
97
+ op[_this.conf.duration] = duration
98
+ if (_this.build) {
99
+ var op2 = _this.build(req, op)
100
+ _this.write(msg_1, op2)
101
+ } else {
102
+ _this.write(msg_1, op)
103
+ }
104
+ })
105
+ next()
106
+ } else {
107
+ next()
108
+ }
109
+ }
110
+ return MiddlewareLogger
111
+ })()
112
+ exports.MiddlewareLogger = MiddlewareLogger
113
+ var mapResponseBody = function (res, chunks) {
114
+ var defaultWrite = res.write.bind(res)
115
+ var defaultEnd = res.end.bind(res)
116
+ var ps = new stream_1.PassThrough()
117
+ ps.on("data", function (data) {
118
+ return chunks.push(data)
119
+ })
120
+ res.write = function () {
121
+ var _a
122
+ var args = []
123
+ for (var _i = 0; _i < arguments.length; _i++) {
124
+ args[_i] = arguments[_i]
125
+ }
126
+ ;(_a = ps).write.apply(_a, args)
127
+ defaultWrite.apply(void 0, args)
128
+ }
129
+ res.end = function () {
130
+ var args = []
131
+ for (var _i = 0; _i < arguments.length; _i++) {
132
+ args[_i] = arguments[_i]
133
+ }
134
+ ps.end.apply(ps, args)
135
+ defaultEnd.apply(void 0, args)
136
+ }
137
+ }
138
+ var NS_PER_SEC = 1e9
139
+ var NS_TO_MS = 1e6
140
+ var getDurationInMilliseconds = function (start) {
141
+ var diff = process.hrtime(start)
142
+ return (diff[0] * NS_PER_SEC + diff[1]) / NS_TO_MS
143
+ }
144
+ var MiddlewareController = (function () {
145
+ function MiddlewareController(logger) {
146
+ this.logger = logger
147
+ this.config = this.config.bind(this)
148
+ }
149
+ MiddlewareController.prototype.config = function (req, res) {
150
+ var obj = req.body
151
+ if (!this.logger) {
152
+ res.status(503).end("Logger is not available")
153
+ return
154
+ }
155
+ var changed = false
156
+ if (obj.log !== undefined) {
157
+ this.logger.conf.log = obj.log
158
+ changed = true
159
+ }
160
+ if (obj.separate !== undefined) {
161
+ this.logger.conf.separate = obj.separate
162
+ changed = true
163
+ }
164
+ if (Array.isArray(obj.skips)) {
165
+ if (isValidSkips(obj.skips)) {
166
+ this.logger.conf.skips = obj.skips
167
+ changed = true
168
+ }
169
+ }
170
+ if (typeof obj.duration === "string" && obj.duration.length > 0) {
171
+ this.logger.conf.duration = obj.duration
172
+ changed = true
173
+ }
174
+ if (typeof obj.request === "string") {
175
+ this.logger.conf.request = obj.request
176
+ changed = true
177
+ }
178
+ if (typeof obj.response === "string") {
179
+ this.logger.conf.response = obj.response
180
+ changed = true
181
+ }
182
+ if (typeof obj.status === "string") {
183
+ this.logger.conf.status = obj.status
184
+ changed = true
185
+ }
186
+ if (typeof obj.size === "string") {
187
+ this.logger.conf.size = obj.size
188
+ changed = true
189
+ }
190
+ if (changed) {
191
+ res.status(200).json(true).end()
192
+ } else {
193
+ res.status(204).json(false).end()
194
+ }
195
+ }
196
+ return MiddlewareController
197
+ })()
198
+ exports.MiddlewareController = MiddlewareController
199
+ function isValidSkips(s) {
200
+ for (var _i = 0, s_1 = s; _i < s_1.length; _i++) {
201
+ var x = s_1[_i]
202
+ if (!(typeof x === "string")) {
203
+ return false
204
+ }
205
+ }
206
+ return true
207
+ }
208
+ exports.isValidSkips = isValidSkips
209
+ function mask(s, start, end, replace) {
210
+ if (start < 0) {
211
+ start = 0
212
+ }
213
+ if (end < 0) {
214
+ end = 0
215
+ }
216
+ var t = start + end
217
+ if (t >= s.length) {
218
+ return replace.repeat(s.length)
219
+ }
220
+ return s.substr(0, start) + replace.repeat(s.length - t) + s.substr(s.length - end)
221
+ }
222
+ exports.mask = mask
223
+ function margin(s, start, end, replace) {
224
+ if (start >= end) {
225
+ return ""
226
+ }
227
+ if (start < 0) {
228
+ start = 0
229
+ }
230
+ if (end < 0) {
231
+ end = 0
232
+ }
233
+ if (start >= s.length) {
234
+ return replace.repeat(s.length)
235
+ }
236
+ if (end >= s.length) {
237
+ return replace.repeat(start) + s.substr(start)
238
+ }
239
+ return replace.repeat(start) + s.substr(start, end - start) + replace.repeat(s.length - end)
240
+ }
241
+ exports.margin = margin
242
+ exports.maskMargin = margin
package/lib/resources.js CHANGED
@@ -1,8 +1,108 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict"
2
+ Object.defineProperty(exports, "__esModule", { value: true })
3
+ var fs = require("fs")
4
+ var http = require("http")
5
+ var https = require("https")
3
6
  var resources = (function () {
4
- function resources() {
7
+ function resources() {}
8
+ resources.languageParam = "lang"
9
+ resources.defaultLanguage = "en"
10
+ resources.limits = [12, 24, 60, 100, 120, 180, 300, 600]
11
+ resources.pages = "pages"
12
+ resources.page = "page"
13
+ resources.nextPageToken = "next"
14
+ resources.limit = "limit"
15
+ resources.defaultLimit = 12
16
+ resources.sort = "sort"
17
+ resources.fields = "fields"
18
+ resources.partial = "partial"
19
+ resources.subPartial = "sub"
20
+ resources.encoding = "utf-8"
21
+ return resources
22
+ })()
23
+ exports.resources = resources
24
+ function getView(req, view) {
25
+ var partial = req.query[resources.partial]
26
+ return partial === "true" ? resources.pages + "/" + view : view
27
+ }
28
+ exports.getView = getView
29
+ function isPartial(req) {
30
+ return req.query[resources.partial] === "true"
31
+ }
32
+ exports.isPartial = isPartial
33
+ function isSubPartial(req) {
34
+ return req.query[resources.subPartial] === "true"
35
+ }
36
+ exports.isSubPartial = isSubPartial
37
+ var TypeChecker = (function () {
38
+ function TypeChecker(attributes, allowUndefined) {
39
+ this.attributes = attributes
40
+ this.allowUndefined = allowUndefined
41
+ this.check = this.check.bind(this)
5
42
  }
6
- return resources;
7
- }());
8
- exports.resources = resources;
43
+ TypeChecker.prototype.check = function (req, res, next) {
44
+ var obj = req.body
45
+ if (!obj || obj === "") {
46
+ res.status(400).end("The request body cannot be empty")
47
+ } else {
48
+ var errors = resources.check(obj, this.attributes, this.allowUndefined)
49
+ if (errors.length > 0) {
50
+ res.status(400).json(errors).end()
51
+ } else {
52
+ next()
53
+ }
54
+ }
55
+ }
56
+ return TypeChecker
57
+ })()
58
+ exports.TypeChecker = TypeChecker
59
+ function check(attributes, allowUndefined) {
60
+ var x = new TypeChecker(attributes, allowUndefined)
61
+ return x.check
62
+ }
63
+ exports.check = check
64
+ function loadTemplates(ok, buildTemplates, correct, files) {
65
+ if (!ok) {
66
+ return undefined
67
+ }
68
+ if (!files) {
69
+ files = ["./src/query.xml"]
70
+ }
71
+ var mappers = []
72
+ for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
73
+ var file = files_1[_i]
74
+ var mapper = fs.readFileSync(file, "utf8")
75
+ mappers.push(mapper)
76
+ }
77
+ return buildTemplates(mappers, correct)
78
+ }
79
+ exports.loadTemplates = loadTemplates
80
+ function start(a, s) {
81
+ process.on("uncaughtException", function (err) {
82
+ console.log(err)
83
+ })
84
+ if (s.https) {
85
+ if (s.options) {
86
+ https.createServer(s.options, a).listen(s.port, function () {
87
+ console.log("Use https and start server at port " + s.port)
88
+ })
89
+ } else if (s.key && s.cert && s.key.length > 0 && s.cert.length > 0) {
90
+ var options = {
91
+ key: fs.readFileSync(s.key),
92
+ cert: fs.readFileSync(s.cert),
93
+ }
94
+ https.createServer(options, a).listen(s.port, function () {
95
+ console.log("Use https and start server at port " + s.port)
96
+ })
97
+ } else {
98
+ http.createServer(a).listen(s.port, function () {
99
+ console.log("Start server at port " + s.port)
100
+ })
101
+ }
102
+ } else {
103
+ http.createServer(a).listen(s.port, function () {
104
+ console.log("Start server at port " + s.port)
105
+ })
106
+ }
107
+ }
108
+ exports.start = start