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.
@@ -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, pullAt } = this.app.lib._
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 { site, user, lang, darkMode } = req
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
- if (!errs[req.id]) {
86
- this.log.error('error%s', params.error.message)
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
- await runHook(`${this.ns}:afterBuildLocals`, merged, req, opts)
98
- if (!isEmpty(routeOpts.ns)) await runHook(`${this.ns}.${routeOpts.ns}:afterBuildLocals`, merged, req, opts)
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
 
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "waibu",
3
- "version": "2.13.0",
3
+ "version": "2.14.0",
4
4
  "description": "Web Framework for Bajo",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/wiki/CHANGES.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changes
2
2
 
3
+ ## 2026-05-24
4
+
5
+ - [2.14.0] Add auto detection of theme & iconset for all widgets incl the dynamic one
6
+ - [2.14.0] Bug fix in ```handle-error.js```
7
+
3
8
  ## 2026-05-22
4
9
 
5
10
  - [2.13.0] Add ```config.log.noReq``` & ```config.log.noReply```