@mojojs/core 0.15.3 → 0.16.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/renderer.d.ts +4 -3
- package/lib/renderer.js +20 -6
- package/lib/renderer.js.map +1 -1
- package/lib/types.d.ts +1 -0
- package/package.json +1 -1
- package/vendor/views/mojo/debug.html.mt +51 -51
- package/vendor/views/mojo/exception.html.mt +1 -1
- package/vendor/views/mojo/not-found.html.mt +1 -1
package/lib/renderer.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { MojoContext, RenderOptions } from './types.js';
|
|
3
3
|
interface EngineResult {
|
|
4
|
-
output: string | Buffer;
|
|
5
4
|
format: string;
|
|
5
|
+
output: string | Buffer;
|
|
6
6
|
}
|
|
7
7
|
interface ViewSuggestion {
|
|
8
|
-
format: string;
|
|
9
8
|
engine: string;
|
|
9
|
+
format: string;
|
|
10
10
|
path: string;
|
|
11
|
+
variant?: string;
|
|
11
12
|
}
|
|
12
13
|
declare type ViewIndex = Record<string, ViewSuggestion[]>;
|
|
13
14
|
interface ViewEngine {
|
|
@@ -22,7 +23,7 @@ export declare class Renderer {
|
|
|
22
23
|
viewPaths: string[];
|
|
23
24
|
_viewIndex: ViewIndex | undefined;
|
|
24
25
|
addEngine(name: string, engine: ViewEngine): this;
|
|
25
|
-
findView(
|
|
26
|
+
findView(options: RenderOptions): ViewSuggestion | null;
|
|
26
27
|
render(ctx: MojoContext, options: RenderOptions): Promise<EngineResult | null>;
|
|
27
28
|
respond(ctx: MojoContext, result: EngineResult, options: {
|
|
28
29
|
status?: number;
|
package/lib/renderer.js
CHANGED
|
@@ -17,10 +17,24 @@ export class Renderer {
|
|
|
17
17
|
this.engines[name] = engine;
|
|
18
18
|
return this;
|
|
19
19
|
}
|
|
20
|
-
findView(
|
|
21
|
-
|
|
20
|
+
findView(options) {
|
|
21
|
+
const view = options.view;
|
|
22
|
+
const index = this._viewIndex;
|
|
23
|
+
if (view === undefined || index === undefined || index[view] === undefined)
|
|
22
24
|
return null;
|
|
23
|
-
|
|
25
|
+
// Variants
|
|
26
|
+
let fallback;
|
|
27
|
+
const variant = options.variant;
|
|
28
|
+
const views = index[view];
|
|
29
|
+
if (views.length > 1) {
|
|
30
|
+
for (const suggestion of views) {
|
|
31
|
+
if (suggestion.variant === variant)
|
|
32
|
+
return suggestion;
|
|
33
|
+
if (fallback === undefined && suggestion.variant === undefined)
|
|
34
|
+
fallback = suggestion;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return fallback ?? views[0];
|
|
24
38
|
}
|
|
25
39
|
async render(ctx, options) {
|
|
26
40
|
const log = ctx.log;
|
|
@@ -106,12 +120,12 @@ export class Renderer {
|
|
|
106
120
|
continue;
|
|
107
121
|
for await (const file of dir.list({ recursive: true })) {
|
|
108
122
|
const name = dir.relative(file).toArray().join('/');
|
|
109
|
-
const match = name.match(/^(.+)\.([^.]+)
|
|
123
|
+
const match = name.match(/^(.+)\.([^.]+?)(?:\+([^.]+))?\.([^.]+)$/);
|
|
110
124
|
if (match === null)
|
|
111
125
|
continue;
|
|
112
126
|
if (viewIndex[match[1]] === undefined)
|
|
113
127
|
viewIndex[match[1]] = [];
|
|
114
|
-
viewIndex[match[1]].push({ format: match[2],
|
|
128
|
+
viewIndex[match[1]].push({ format: match[2], variant: match[3], engine: match[4], path: file.toString() });
|
|
115
129
|
}
|
|
116
130
|
}
|
|
117
131
|
}
|
|
@@ -122,7 +136,7 @@ export class Renderer {
|
|
|
122
136
|
return { output: await engine.render(ctx, options), format: options.format ?? this.defaultFormat };
|
|
123
137
|
}
|
|
124
138
|
async _renderView(ctx, options) {
|
|
125
|
-
const view = this.findView(options
|
|
139
|
+
const view = this.findView(options);
|
|
126
140
|
if (view === null)
|
|
127
141
|
return null;
|
|
128
142
|
const engine = this.engines[view.engine];
|
package/lib/renderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAiBpC,MAAM,OAAO,QAAQ;IAArB;QACE,iBAAY,GAAG,IAAI,CAAC;QACpB,kBAAa,GAAG,IAAI,CAAC;QACrB,kBAAa,GAAG,MAAM,CAAC;QACvB,YAAO,GAA+B,EAAE,CAAC;QACzC,oBAAe,GAAG,GAAG,CAAC;QACtB,cAAS,GAAa,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvF,eAAU,GAA0B,SAAS,CAAC;IAkJhD,CAAC;IAhJC,SAAS,CAAC,IAAY,EAAE,MAAkB;QACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,OAAsB;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9B,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAExF,WAAW;QACX,IAAI,QAAQ,CAAC;QACb,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE;gBAC9B,IAAI,UAAU,CAAC,OAAO,KAAK,OAAO;oBAAE,OAAO,UAAU,CAAC;gBACtD,IAAI,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS;oBAAE,QAAQ,GAAG,UAAU,CAAC;aACvF;SACF;QAED,OAAO,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAgB,EAAE,OAAsB;QACnD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACpB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACrC,OAAO,EAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,EAAC,CAAC;SAChE;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACrC,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE;gBAC3B,OAAO,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,EAAC,CAAC;aACvG;YACD,OAAO,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,EAAC,CAAC;SAC9F;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACrC,OAAO,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,EAAC,CAAC;SACzF;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACtC,GAAG,CAAC,KAAK,CAAC,4BAA4B,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;YAChE,OAAO,EAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAC,CAAC;SAClG;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;YAChC,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEjC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;gBACtC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;gBACtC,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;gBAChC,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBACrC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;aAC/C;YAED,OAAO,MAAM,CAAC;SACf;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,MAAM,UAAU,GAAW,KAAK,CAAC,UAAU,CAAC;QAC5C,MAAM,MAAM,GAAW,KAAK,CAAC,MAAM,CAAC;QACpC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;YAClF,OAAO,CAAC,IAAI,GAAG,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC;SAC1C;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,GAAG,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEjC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;gBAChC,OAAO,CAAC,IAAI,GAAG,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC3C,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;gBAChC,GAAG,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;gBAChD,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;aAC7C;YAED,OAAO,MAAM,CAAC;SACf;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAgB,EAAE,MAAoB,EAAE,OAA0B;QAC9E,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACpB,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE7B,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE;YACnF,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC9C,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAChD,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;gBACpC,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;aACpC;SACF;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,0BAA0B,CAAC;QAC/E,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,SAAS,GAAc,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACpD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;YAC5D,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK;gBAAE,SAAS;YAE7C,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,EAAE;gBACpD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACpE,IAAI,KAAK,KAAK,IAAI;oBAAE,SAAS;gBAE7B,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;oBAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBAChE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;aAC1G;SACF;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAgB,EAAE,OAAsB;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,EAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAC,CAAC;IACnG,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAgB,EAAE,OAAsB;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAEtC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC7B,OAAO,EAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC;IAC1E,CAAC;CACF"}
|
package/lib/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
<html>
|
|
4
4
|
<head>
|
|
5
5
|
<title>Debug</title>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
%= ctx.mojoFaviconTag()
|
|
7
|
+
%= ctx.scriptTag('/mojo/bootstrap/bootstrap.bundle.min.js')
|
|
8
|
+
%= ctx.scriptTag('/mojo/highlight.js/highlight.pack.js')
|
|
9
|
+
%= ctx.styleTag('/mojo/bootstrap/bootstrap.min.css')
|
|
10
|
+
%= ctx.styleTag('/mojo/highlight.js/highlight-mojo-dark.css')
|
|
11
|
+
%= ctx.styleTag('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css')
|
|
12
|
+
%= ctx.styleTag('/mojo/mojo.css')
|
|
13
13
|
<script>
|
|
14
14
|
hljs.initHighlightingOnLoad();
|
|
15
15
|
window.onload = function() {
|
|
16
16
|
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
|
17
|
-
const tooltipList = tooltipTriggerList.map(
|
|
17
|
+
const tooltipList = tooltipTriggerList.map(tooltipTriggerEl => {
|
|
18
18
|
return new bootstrap.Tooltip(tooltipTriggerEl);
|
|
19
19
|
});
|
|
20
20
|
};
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
<div class="row flex-wrap">
|
|
62
62
|
<main class="col-sm-12 col-md-8 col-lg-10 py-md-3 pl-md-5">
|
|
63
63
|
<div class="row mojo-divider">
|
|
64
|
-
|
|
64
|
+
% if (exception !== null) {
|
|
65
65
|
<div class="alert alert-danger mojo-wide" role="alert">
|
|
66
66
|
<h2>Server Error</h2>
|
|
67
67
|
This application is in <b>development</b> mode and will show internal information to help you with
|
|
@@ -69,33 +69,33 @@
|
|
|
69
69
|
</div>
|
|
70
70
|
<div id="showcase" class="mojo-box mojo-code mojo-no-bottom-border mojo-no-top-border mojo-border-radius-top">
|
|
71
71
|
<pre id="error" class="mojo-error"><%= exception %></pre>
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
% const context = await view.exceptionContext(exception);
|
|
73
|
+
% if (context !== null) {
|
|
74
74
|
<div>
|
|
75
75
|
<table class="mojo-wide">
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
% for (const line of context.source) {
|
|
77
|
+
% const extra = context.line === line.num ? ' mojo-important' : '';
|
|
78
78
|
<tr>
|
|
79
79
|
<td class="text-right<%= extra %>"><%= line.num %></td>
|
|
80
80
|
<td class="mojo-context mojo-wide<%= extra %>"><pre><code><%= line.code %></code></pre></td>
|
|
81
81
|
</tr>
|
|
82
|
-
|
|
82
|
+
% }
|
|
83
83
|
</table>
|
|
84
84
|
</div>
|
|
85
|
-
|
|
85
|
+
% }
|
|
86
86
|
</div>
|
|
87
87
|
<div id="trace" class="mojo-box mojo-no-padding more mojo-no-top-border mojo-border-radius-bottom">
|
|
88
88
|
<div id="frames" class="more">
|
|
89
89
|
<table class="mojo-striped-grey mojo-wide">
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
% const lines = exception.stack.split('\n').filter(line => line.match(/^\s*at\ /));
|
|
91
|
+
% const trace = lines.map(val => val.replace(/^\s+/, ''));
|
|
92
|
+
% for (const frame of trace) {
|
|
93
93
|
<tr><td class="mojo-value"><pre><%= frame %></pre></td></tr>
|
|
94
|
-
|
|
94
|
+
% }
|
|
95
95
|
</table>
|
|
96
96
|
</div>
|
|
97
97
|
</div>
|
|
98
|
-
|
|
98
|
+
% } else {
|
|
99
99
|
<div class="alert alert-warning mojo-wide" role="alert">
|
|
100
100
|
<h2>Page Not Found</h2>
|
|
101
101
|
This application is in <b>development</b> mode and will show internal information to help you with
|
|
@@ -108,12 +108,12 @@
|
|
|
108
108
|
for <code><%= ctx.req.path %></code>, maybe you need to add a new one?
|
|
109
109
|
</p>
|
|
110
110
|
</div>
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
111
|
+
% function walk (route, depth) {
|
|
112
|
+
% const pattern = route.pattern;
|
|
113
|
+
% let unparsed = pattern.unparsed || '/';
|
|
114
|
+
% if (depth > 0) unparsed = `+${unparsed}`;
|
|
115
|
+
% pattern.match('/', {isEndpoint: route.isEndpoint});
|
|
116
|
+
% const regex = pattern.regex.toString();
|
|
117
117
|
<tr data-bs-toggle="tooltip" data-bs-placement="left" data-bs-html="true"
|
|
118
118
|
title="<b>Regex:</b> <code><%= regex %></code>">
|
|
119
119
|
<td class="mojo-value">
|
|
@@ -123,17 +123,17 @@
|
|
|
123
123
|
<pre><%= route.methods.join(', ').toUpperCase() || '*' %></pre>
|
|
124
124
|
</td>
|
|
125
125
|
<td class="mojo-value">
|
|
126
|
-
|
|
126
|
+
% if (route.customName !== undefined) {
|
|
127
127
|
<span class="badge bg-success"><%= route.customName %></span>
|
|
128
|
-
|
|
128
|
+
% } else if (route.defaultName !== undefined) {
|
|
129
129
|
<span class="badge bg-secondary"><%= route.defaultName %></span>
|
|
130
|
-
|
|
130
|
+
% }
|
|
131
131
|
</td>
|
|
132
132
|
</tr>
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
% depth++;
|
|
134
|
+
%= route.children.map(child => walk(child, depth)).join('')
|
|
135
|
+
% depth--;
|
|
136
|
+
% }
|
|
137
137
|
<table class="mojo-striped-light mojo-wide">
|
|
138
138
|
<thead>
|
|
139
139
|
<tr>
|
|
@@ -142,43 +142,43 @@
|
|
|
142
142
|
<th>Name</th>
|
|
143
143
|
</tr>
|
|
144
144
|
</thead>
|
|
145
|
-
|
|
145
|
+
%= ctx.app.router.children.map(child => walk(child, 0)).join('')
|
|
146
146
|
</table>
|
|
147
147
|
</div>
|
|
148
|
-
|
|
148
|
+
% }
|
|
149
149
|
</div>
|
|
150
150
|
<div class="row mojo-divider">
|
|
151
151
|
<div id="request" class="mojo-box mojo-no-padding mojo-border-radius-both">
|
|
152
|
-
|
|
152
|
+
% const keyValue = function (key, value) {
|
|
153
153
|
<tr>
|
|
154
154
|
<td class="mojo-key text-right"><%= key %>:</td>
|
|
155
155
|
<td class="mojo-value"><pre><%= value %></pre></td>
|
|
156
156
|
</tr>
|
|
157
|
-
|
|
157
|
+
% };
|
|
158
158
|
<table class="mojo-striped mojo-fixed-table mojo-wide">
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
159
|
+
% keyValue('Request ID', ctx.req.requestId);
|
|
160
|
+
% keyValue('Method', ctx.req.method);
|
|
161
|
+
% keyValue('Path', ctx.req.path);
|
|
162
|
+
% keyValue('Base URL', ctx.req.baseUrl);
|
|
163
|
+
% keyValue('Parameters', ctx.inspect((await ctx.params()).toObject()));
|
|
164
|
+
% keyValue('Stash', ctx.inspect(ctx.stash));
|
|
165
|
+
% const rawHeaders = ctx.req.raw.rawHeaders;
|
|
166
|
+
% for (let i = 0; i < rawHeaders.length; i += 2) {
|
|
167
|
+
% keyValue(rawHeaders[i], rawHeaders[i + 1]);
|
|
168
|
+
% }
|
|
169
169
|
</table>
|
|
170
170
|
</div>
|
|
171
171
|
</div>
|
|
172
172
|
<div class="row">
|
|
173
|
-
|
|
174
|
-
|
|
173
|
+
% if (ctx.app.log.history.length > 0) {
|
|
174
|
+
% const log = ctx.app.log.history.map(view.stringFormatter).join('');
|
|
175
175
|
<pre class="mojo-terminal"><code class="nohighlight"><%= log %></code></pre>
|
|
176
|
-
|
|
176
|
+
% } else {
|
|
177
177
|
<div class="alert alert-warning mojo-wide" role="alert">
|
|
178
178
|
The application log appears to be empty, perhaps the log level <b><%= ctx.app.log.level %></b> is too
|
|
179
179
|
high? Try lowering it to <b>trace</b> for framework specific information.
|
|
180
180
|
</div>
|
|
181
|
-
|
|
181
|
+
% }
|
|
182
182
|
</div>
|
|
183
183
|
</main>
|
|
184
184
|
</div>
|