waibu 2.13.0 → 2.14.0
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/build-locals.js +28 -32
- package/lib/handle-error.js +1 -1
- package/package.json +1 -1
- package/wiki/CHANGES.md +5 -0
package/lib/build-locals.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const errs = {}
|
|
2
|
-
|
|
3
1
|
async function buildHomesMenu (req) {
|
|
4
2
|
const { callHandler } = this.app.bajo
|
|
5
3
|
const { get, find, orderBy } = this.app.lib._
|
|
@@ -52,50 +50,48 @@ async function buildPagesMenu (req) {
|
|
|
52
50
|
return orderBy(all, ['level', 'title'])
|
|
53
51
|
}
|
|
54
52
|
|
|
53
|
+
const omitted = ['createdAt', 'updatedAt', '_immutable']
|
|
54
|
+
|
|
55
55
|
async function buildLocals ({ tpl, params = {}, opts = {} } = {}) {
|
|
56
56
|
const { runHook } = this.app.bajo
|
|
57
|
-
const { set, merge, pick, get, isEmpty, find,
|
|
57
|
+
const { set, merge, pick, get, isEmpty, find, cloneDeep, omit } = this.app.lib._
|
|
58
58
|
const { req, reply } = opts
|
|
59
|
-
params.page = merge(params.page ?? {}, { ns: req.ns, features: [] })
|
|
60
|
-
params.sidebar = params.sidebar ?? []
|
|
61
59
|
|
|
62
|
-
const
|
|
63
|
-
const theme = pick(find(this.themes, { name: opts.theme ?? req.theme }) ?? {}, ['name', 'framework'])
|
|
64
|
-
const iconset = pick(find(this.iconsets, { name: opts.iconset ?? req.iconset }) ?? {}, ['name'])
|
|
65
|
-
const routeOpts = get(req, 'routeOptions.config', {})
|
|
66
|
-
const _meta = { theme, iconset, site, user, lang, darkMode, routeOpts }
|
|
67
|
-
_meta.site = _meta.site ?? {}
|
|
68
|
-
merge(_meta, pick(req, ['url', 'params', 'query']))
|
|
69
|
-
_meta.env = this.app.bajo.config.env
|
|
70
|
-
_meta.url = _meta.url.split('?')[0].split('#')[0]
|
|
71
|
-
if (req.session) _meta.prevUrl = req.session.prevUrl
|
|
72
|
-
_meta.route = get(req, 'routeOptions.url')
|
|
73
|
-
_meta.template = tpl
|
|
74
|
-
_meta.hostHeader = req.headers.host
|
|
75
|
-
_meta.statusCode = 200
|
|
76
|
-
const pulled = []
|
|
77
|
-
for (const k in errs) {
|
|
78
|
-
if (Date.now() - errs[k] > 5000) pulled.push(k)
|
|
79
|
-
}
|
|
80
|
-
pullAt(errs, pulled)
|
|
60
|
+
const _meta = { template: tpl }
|
|
81
61
|
if (params.error) {
|
|
82
62
|
if (params.error.statusCode) _meta.statusCode = params.error.statusCode
|
|
83
63
|
_meta.errorMessage = params.error.message
|
|
84
64
|
if (params.error.ns) params.page.ns = params.error.ns
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (this.app.bajo.config.env === 'dev') console.log(params.error)
|
|
88
|
-
}
|
|
89
|
-
errs[req.id] = Date.now()
|
|
65
|
+
this.log.error('error%s', params.error.message)
|
|
66
|
+
if (this.app.bajo.config.env === 'dev') console.log(params.error)
|
|
90
67
|
}
|
|
91
|
-
_meta.flash = reply && req.session && req.flash && !opts.partial && !opts.noFlash ? reply.flash() : {}
|
|
92
68
|
if (!opts.partial) {
|
|
69
|
+
params.page = merge(params.page ?? {}, { ns: req.ns, features: [] })
|
|
70
|
+
params.sidebar = params.sidebar ?? []
|
|
71
|
+
merge(_meta, pick(req, ['site', 'user', 'lang', 'darkMode', 'url']))
|
|
72
|
+
_meta.params = cloneDeep(req.params)
|
|
73
|
+
_meta.query = cloneDeep(req.query)
|
|
74
|
+
_meta.site = omit(req.site, omitted)
|
|
75
|
+
_meta.user = omit(req.user, [...omitted, 'apiKey', 'salt', 'token'])
|
|
76
|
+
_meta.theme = pick(find(this.themes, { name: opts.theme ?? req.theme }) ?? {}, ['name', 'framework'])
|
|
77
|
+
_meta.iconset = pick(find(this.iconsets, { name: opts.iconset ?? req.iconset }) ?? {}, ['name'])
|
|
78
|
+
_meta.routeOpts = get(req, 'routeOptions.config', {})
|
|
93
79
|
set(params, 'menu.homes', await buildHomesMenu.call(this, req))
|
|
94
80
|
set(params, 'menu.pages', await buildPagesMenu.call(this, req))
|
|
81
|
+
_meta.env = this.app.bajo.config.env
|
|
82
|
+
_meta.url = _meta.url.split('?')[0].split('#')[0]
|
|
83
|
+
if (req.session) _meta.prevUrl = req.session.prevUrl
|
|
84
|
+
_meta.route = get(req, 'routeOptions.url')
|
|
85
|
+
_meta.hostHeader = req.headers.host
|
|
86
|
+
_meta.statusCode = 200
|
|
87
|
+
_meta.reqId = req.id
|
|
88
|
+
_meta.flash = reply && req.session && req.flash && !opts.noFlash ? reply.flash() : {}
|
|
95
89
|
}
|
|
96
90
|
const merged = merge({}, params, { _meta })
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
if (!opts.partial) {
|
|
92
|
+
await runHook(`${this.ns}:afterBuildLocals`, merged, req, opts)
|
|
93
|
+
if (!isEmpty(merged._meta.routeOpts.ns)) await runHook(`${this.ns}.${merged._meta.routeOpts.ns}:afterBuildLocals`, merged, req, opts)
|
|
94
|
+
}
|
|
99
95
|
return merged
|
|
100
96
|
}
|
|
101
97
|
|
package/lib/handle-error.js
CHANGED
|
@@ -2,9 +2,9 @@ import { redirect } from './handle-redirect.js'
|
|
|
2
2
|
import { notFound, writeHtml, interceptor } from './handle-not-found.js'
|
|
3
3
|
|
|
4
4
|
async function error (err, req, reply) {
|
|
5
|
+
this.log.error(err)
|
|
5
6
|
const resp = await interceptor.call(this, 'errorHandler', err, req, reply)
|
|
6
7
|
if (resp) return resp
|
|
7
|
-
this.log.error(err)
|
|
8
8
|
const payload = {
|
|
9
9
|
text: this.app.log.getErrorMessage(err),
|
|
10
10
|
title: req.t('internalServerError')
|
package/package.json
CHANGED
package/wiki/CHANGES.md
CHANGED