amphora 8.2.2 → 8.4.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/render.js +22 -7
- package/lib/services/layouts.js +9 -4
- package/lib/setup.js +5 -0
- package/package.json +1 -1
package/lib/render.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var uriRoutes, renderers,
|
|
3
|
+
var uriRoutes, renderers, errorHandler,
|
|
4
4
|
db = require('./services/db'),
|
|
5
5
|
log = require('./services/logger').setup({
|
|
6
6
|
file: __filename,
|
|
@@ -264,6 +264,16 @@ function logTime(hrStart, uri) {
|
|
|
264
264
|
};
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Passes page error handling back to the site.
|
|
269
|
+
*
|
|
270
|
+
* @param {Function} handler - (error, response, next) => {}
|
|
271
|
+
*/
|
|
272
|
+
function registerErrorHandler(handler) {
|
|
273
|
+
errorHandler = handler;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
|
|
267
277
|
/**
|
|
268
278
|
* Run composer by translating url to a "page" by base64ing it. Errors are handled by Express.
|
|
269
279
|
*
|
|
@@ -280,13 +290,17 @@ function renderExpressRoute(req, res, next) {
|
|
|
280
290
|
|
|
281
291
|
return module.exports.renderUri(pageReference, req, res, hrStart)
|
|
282
292
|
.catch((error) => {
|
|
283
|
-
if (
|
|
284
|
-
|
|
285
|
-
message: error.message
|
|
286
|
-
});
|
|
287
|
-
next();
|
|
293
|
+
if (errorHandler) {
|
|
294
|
+
errorHandler(error, res, next);
|
|
288
295
|
} else {
|
|
289
|
-
|
|
296
|
+
if (error.name === 'NotFoundError') {
|
|
297
|
+
log('info', `could not find resource ${req.uri}`, {
|
|
298
|
+
message: error.message
|
|
299
|
+
});
|
|
300
|
+
next();
|
|
301
|
+
} else {
|
|
302
|
+
next(error);
|
|
303
|
+
}
|
|
290
304
|
}
|
|
291
305
|
});
|
|
292
306
|
}
|
|
@@ -373,6 +387,7 @@ module.exports.findRenderer = findRenderer;
|
|
|
373
387
|
// Setup
|
|
374
388
|
module.exports.renderers = {}; // Overriden when a user registers a render object
|
|
375
389
|
module.exports.registerRenderers = registerRenderers;
|
|
390
|
+
module.exports.registerErrorHandler = registerErrorHandler;
|
|
376
391
|
|
|
377
392
|
// For Testing
|
|
378
393
|
module.exports.resetUriRouteHandlers = resetUriRouteHandlers;
|
package/lib/services/layouts.js
CHANGED
|
@@ -6,8 +6,9 @@ const _ = require('lodash'),
|
|
|
6
6
|
uid = require('../uid'),
|
|
7
7
|
files = require('../files'),
|
|
8
8
|
models = require('./models'),
|
|
9
|
+
components = require('./components'),
|
|
9
10
|
meta = require('./metadata'),
|
|
10
|
-
{ getLayoutName, replaceVersion } = require('clayutils'),
|
|
11
|
+
{ getLayoutName, replaceVersion, isComponent } = require('clayutils'),
|
|
11
12
|
bus = require('./bus');
|
|
12
13
|
|
|
13
14
|
/**
|
|
@@ -39,9 +40,13 @@ function get(uri, locals) {
|
|
|
39
40
|
* @returns {Promise}
|
|
40
41
|
*/
|
|
41
42
|
function put(uri, data, locals) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
// layout-level components are published the same as page-level components
|
|
44
|
+
if (isComponent(uri)) return components.cmptPut(uri, data, locals);
|
|
45
|
+
|
|
46
|
+
// else try to apply a layout model to the layout instance
|
|
47
|
+
const model = files.getLayoutModules(getLayoutName(uri)),
|
|
48
|
+
callHooks = _.get(locals, 'hooks') !== 'false';
|
|
49
|
+
let result;
|
|
45
50
|
|
|
46
51
|
if (model && _.isFunction(model.save) && callHooks) {
|
|
47
52
|
result = models.put(model, uri, data, locals);
|
package/lib/setup.js
CHANGED
|
@@ -35,6 +35,7 @@ module.exports = function (options = {}) {
|
|
|
35
35
|
providers = [],
|
|
36
36
|
sessionStore,
|
|
37
37
|
renderers,
|
|
38
|
+
errorHandler,
|
|
38
39
|
plugins = [],
|
|
39
40
|
bootstrap = true,
|
|
40
41
|
storage = false,
|
|
@@ -58,6 +59,10 @@ module.exports = function (options = {}) {
|
|
|
58
59
|
render.registerRenderers(renderers);
|
|
59
60
|
}
|
|
60
61
|
|
|
62
|
+
if (errorHandler) {
|
|
63
|
+
render.registerErrorHandler(errorHandler);
|
|
64
|
+
}
|
|
65
|
+
|
|
61
66
|
// Make sure the storage module is run, then bootstrap
|
|
62
67
|
// all the default data and finally return the router
|
|
63
68
|
return storage.setup()
|