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/README.md +1 -1
- package/lib/GenericController.js +224 -131
- package/lib/GenericSearchController.js +58 -37
- package/lib/HealthController.js +16 -58
- package/lib/LoadController.js +71 -46
- package/lib/LoadSearchController.js +113 -41
- package/lib/LogController.js +89 -0
- package/lib/LowCodeController.js +100 -0
- package/lib/SearchController.js +32 -25
- package/lib/access.js +34 -0
- package/lib/client.js +80 -0
- package/lib/edit.js +99 -84
- package/lib/health.js +157 -76
- package/lib/http.js +316 -0
- package/lib/index.js +488 -16
- package/lib/log.js +242 -0
- package/lib/resources.js +106 -6
- package/lib/search.js +766 -160
- package/lib/view.js +48 -34
- package/package.json +8 -4
- package/src/GenericController.ts +217 -106
- package/src/GenericSearchController.ts +38 -21
- package/src/HealthController.ts +9 -9
- package/src/LoadController.ts +70 -40
- package/src/LoadSearchController.ts +114 -21
- package/src/LogController.ts +137 -0
- package/src/LowCodeController.ts +88 -0
- package/src/SearchController.ts +28 -17
- package/src/access.ts +42 -0
- package/src/client.ts +69 -0
- package/src/edit.ts +93 -61
- package/src/health.ts +27 -28
- package/src/http.ts +295 -0
- package/src/index.ts +464 -13
- package/src/log.ts +245 -0
- package/src/metadata.ts +34 -23
- package/src/resources.ts +143 -4
- package/src/search.ts +782 -198
- package/src/view.ts +44 -30
- package/tsconfig.json +1 -0
- package/lib/response.js +0 -12
- package/src/response.ts +0 -10
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|