@eggjs/view 4.0.0-beta.19 → 4.0.0-beta.21

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,15 +1,12 @@
1
- import { ViewManager } from "../../lib/view_manager.js";
2
- import { Application } from "egg";
3
-
4
- //#region src/app/extend/application.d.ts
1
+ import { Application } from 'egg';
2
+ import { ViewManager } from '../../lib/view_manager.ts';
5
3
  declare const VIEW: unique symbol;
6
- declare class ViewApplication extends Application {
7
- [VIEW]: ViewManager;
8
- /**
9
- * Retrieve ViewManager instance
10
- * @member {ViewManager} Application#view
11
- */
12
- get view(): ViewManager;
4
+ export default class ViewApplication extends Application {
5
+ [VIEW]: ViewManager;
6
+ /**
7
+ * Retrieve ViewManager instance
8
+ * @member {ViewManager} Application#view
9
+ */
10
+ get view(): ViewManager;
13
11
  }
14
- //#endregion
15
- export { ViewApplication as default };
12
+ export {};
@@ -1,19 +1,17 @@
1
+ import { Application } from 'egg';
1
2
  import { ViewManager } from "../../lib/view_manager.js";
2
- import { Application } from "egg";
3
-
4
- //#region src/app/extend/application.ts
5
- const VIEW = Symbol("Application#view");
6
- var ViewApplication = class extends Application {
7
- [VIEW];
8
- /**
9
- * Retrieve ViewManager instance
10
- * @member {ViewManager} Application#view
11
- */
12
- get view() {
13
- if (!this[VIEW]) this[VIEW] = new ViewManager(this);
14
- return this[VIEW];
15
- }
16
- };
17
-
18
- //#endregion
19
- export { ViewApplication as default };
3
+ const VIEW = Symbol('Application#view');
4
+ export default class ViewApplication extends Application {
5
+ [VIEW];
6
+ /**
7
+ * Retrieve ViewManager instance
8
+ * @member {ViewManager} Application#view
9
+ */
10
+ get view() {
11
+ if (!this[VIEW]) {
12
+ this[VIEW] = new ViewManager(this);
13
+ }
14
+ return this[VIEW];
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUV4QyxNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWdCLFNBQVEsV0FBVztJQUN0RCxDQUFDLElBQUksQ0FBQyxDQUFjO0lBRXBCOzs7T0FHRztJQUNILElBQUksSUFBSTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiJ9
@@ -1,39 +1,36 @@
1
- import { RenderOptions } from "../../lib/view_manager.js";
2
- import { ContextView } from "../../lib/context_view.js";
3
- import { Context } from "egg";
4
-
5
- //#region src/app/extend/context.d.ts
1
+ import { Context } from 'egg';
2
+ import { ContextView } from '../../lib/context_view.ts';
3
+ import { type RenderOptions } from '../../lib/view_manager.ts';
6
4
  declare const VIEW: unique symbol;
7
- declare class ViewContext extends Context {
8
- [VIEW]: ContextView;
9
- /**
10
- * Render a file by view engine, then set to body
11
- * @param {String} name - the file path based on root
12
- * @param {Object} [locals] - data used by template
13
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
14
- */
15
- render(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<void>;
16
- /**
17
- * Render a file by view engine and return it
18
- * @param {String} name - the file path based on root
19
- * @param {Object} [locals] - data used by template
20
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
21
- * @return {Promise<String>} result - return a promise with a render result
22
- */
23
- renderView(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
24
- /**
25
- * Render template string by view engine and return it
26
- * @param {String} tpl - template string
27
- * @param {Object} [locals] - data used by template
28
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
29
- * @return {Promise<String>} result - return a promise with a render result
30
- */
31
- renderString(tpl: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
32
- /**
33
- * View instance that is created every request
34
- * @member {ContextView} Context#view
35
- */
36
- get view(): ContextView;
5
+ export default class ViewContext extends Context {
6
+ [VIEW]: ContextView;
7
+ /**
8
+ * Render a file by view engine, then set to body
9
+ * @param {String} name - the file path based on root
10
+ * @param {Object} [locals] - data used by template
11
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
12
+ */
13
+ render(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<void>;
14
+ /**
15
+ * Render a file by view engine and return it
16
+ * @param {String} name - the file path based on root
17
+ * @param {Object} [locals] - data used by template
18
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
19
+ * @return {Promise<String>} result - return a promise with a render result
20
+ */
21
+ renderView(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
22
+ /**
23
+ * Render template string by view engine and return it
24
+ * @param {String} tpl - template string
25
+ * @param {Object} [locals] - data used by template
26
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
27
+ * @return {Promise<String>} result - return a promise with a render result
28
+ */
29
+ renderString(tpl: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
30
+ /**
31
+ * View instance that is created every request
32
+ * @member {ContextView} Context#view
33
+ */
34
+ get view(): ContextView;
37
35
  }
38
- //#endregion
39
- export { ViewContext as default };
36
+ export {};
@@ -1,49 +1,48 @@
1
- import "../../lib/view_manager.js";
1
+ import { Context } from 'egg';
2
2
  import { ContextView } from "../../lib/context_view.js";
3
- import { Context } from "egg";
4
-
5
- //#region src/app/extend/context.ts
6
- const VIEW = Symbol("Context#view");
7
- var ViewContext = class extends Context {
8
- [VIEW];
9
- /**
10
- * Render a file by view engine, then set to body
11
- * @param {String} name - the file path based on root
12
- * @param {Object} [locals] - data used by template
13
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
14
- */
15
- async render(name, locals, options) {
16
- this.body = await this.renderView(name, locals, options);
17
- }
18
- /**
19
- * Render a file by view engine and return it
20
- * @param {String} name - the file path based on root
21
- * @param {Object} [locals] - data used by template
22
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
23
- * @return {Promise<String>} result - return a promise with a render result
24
- */
25
- async renderView(name, locals, options) {
26
- return await this.view.render(name, locals, options);
27
- }
28
- /**
29
- * Render template string by view engine and return it
30
- * @param {String} tpl - template string
31
- * @param {Object} [locals] - data used by template
32
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
33
- * @return {Promise<String>} result - return a promise with a render result
34
- */
35
- async renderString(tpl, locals, options) {
36
- return await this.view.renderString(tpl, locals, options);
37
- }
38
- /**
39
- * View instance that is created every request
40
- * @member {ContextView} Context#view
41
- */
42
- get view() {
43
- if (!this[VIEW]) this[VIEW] = new ContextView(this);
44
- return this[VIEW];
45
- }
46
- };
47
-
48
- //#endregion
49
- export { ViewContext as default };
3
+ import {} from "../../lib/view_manager.js";
4
+ const VIEW = Symbol('Context#view');
5
+ export default class ViewContext extends Context {
6
+ [VIEW];
7
+ /**
8
+ * Render a file by view engine, then set to body
9
+ * @param {String} name - the file path based on root
10
+ * @param {Object} [locals] - data used by template
11
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
12
+ */
13
+ async render(name, locals, options) {
14
+ const body = await this.renderView(name, locals, options);
15
+ this.body = body;
16
+ }
17
+ /**
18
+ * Render a file by view engine and return it
19
+ * @param {String} name - the file path based on root
20
+ * @param {Object} [locals] - data used by template
21
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
22
+ * @return {Promise<String>} result - return a promise with a render result
23
+ */
24
+ async renderView(name, locals, options) {
25
+ return await this.view.render(name, locals, options);
26
+ }
27
+ /**
28
+ * Render template string by view engine and return it
29
+ * @param {String} tpl - template string
30
+ * @param {Object} [locals] - data used by template
31
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
32
+ * @return {Promise<String>} result - return a promise with a render result
33
+ */
34
+ async renderString(tpl, locals, options) {
35
+ return await this.view.renderString(tpl, locals, options);
36
+ }
37
+ /**
38
+ * View instance that is created every request
39
+ * @member {ContextView} Context#view
40
+ */
41
+ get view() {
42
+ if (!this[VIEW]) {
43
+ this[VIEW] = new ContextView(this);
44
+ }
45
+ return this[VIEW];
46
+ }
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUU5QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFzQixNQUFNLDJCQUEyQixDQUFDO0FBRS9ELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVwQyxNQUFNLENBQUMsT0FBTyxPQUFPLFdBQVksU0FBUSxPQUFPO0lBQzlDLENBQUMsSUFBSSxDQUFDLENBQWM7SUFFcEI7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQVksRUFBRSxNQUE0QixFQUFFLE9BQXVCO1FBQzlFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVksRUFBRSxNQUE0QixFQUFFLE9BQXVCO1FBQ2xGLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQVcsRUFBRSxNQUE0QixFQUFFLE9BQXVCO1FBQ25GLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLElBQUk7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0YifQ==
@@ -1,33 +1,29 @@
1
- import * as egg0 from "egg";
2
-
3
- //#region src/config/config.default.d.ts
4
- interface ViewConfig {
5
- /**
6
- * give a path to find the file, you can specify multiple path with `,` delimiter
7
- * Default is `${baseDir}/app/view`
8
- */
9
- root: string;
10
- /**
11
- * whether cache the file's path
12
- * Default is `true`
13
- */
14
- cache: boolean;
15
- /**
16
- * defaultExtension can be added automatically when there is no extension when call `ctx.render`
17
- * Default is `.html`
18
- */
19
- defaultExtension: string;
20
- /**
21
- * set the default view engine if you don't want specify the viewEngine every request.
22
- * Default is `''`
23
- */
24
- defaultViewEngine: string;
25
- /**
26
- * map the file extension to view engine, such as `{ '.ejs': 'ejs' }`
27
- * Default is `{}`
28
- */
29
- mapping: Record<string, string>;
1
+ export interface ViewConfig {
2
+ /**
3
+ * give a path to find the file, you can specify multiple path with `,` delimiter
4
+ * Default is `${baseDir}/app/view`
5
+ */
6
+ root: string;
7
+ /**
8
+ * whether cache the file's path
9
+ * Default is `true`
10
+ */
11
+ cache: boolean;
12
+ /**
13
+ * defaultExtension can be added automatically when there is no extension when call `ctx.render`
14
+ * Default is `.html`
15
+ */
16
+ defaultExtension: string;
17
+ /**
18
+ * set the default view engine if you don't want specify the viewEngine every request.
19
+ * Default is `''`
20
+ */
21
+ defaultViewEngine: string;
22
+ /**
23
+ * map the file extension to view engine, such as `{ '.ejs': 'ejs' }`
24
+ * Default is `{}`
25
+ */
26
+ mapping: Record<string, string>;
30
27
  }
31
- declare const _default: egg0.EggConfigFactory;
32
- //#endregion
33
- export { ViewConfig, _default as default };
28
+ declare const _default: import("egg").EggConfigFactory;
29
+ export default _default;
@@ -1,14 +1,12 @@
1
- import path from "node:path";
2
- import { defineConfigFactory } from "egg";
3
-
4
- //#region src/config/config.default.ts
5
- var config_default_default = defineConfigFactory((appInfo) => ({ view: {
6
- root: path.join(appInfo.baseDir, "app/view"),
7
- cache: true,
8
- defaultExtension: ".html",
9
- defaultViewEngine: "",
10
- mapping: {}
11
- } }));
12
-
13
- //#endregion
14
- export { config_default_default as default };
1
+ import path from 'node:path';
2
+ import { defineConfigFactory } from 'egg';
3
+ export default defineConfigFactory(appInfo => ({
4
+ view: {
5
+ root: path.join(appInfo.baseDir, 'app/view'),
6
+ cache: true,
7
+ defaultExtension: '.html',
8
+ defaultViewEngine: '',
9
+ mapping: {},
10
+ },
11
+ }));
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxLQUFLLENBQUM7QUE4QjFDLGVBQWUsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO1FBQzVDLEtBQUssRUFBRSxJQUFJO1FBQ1gsZ0JBQWdCLEVBQUUsT0FBTztRQUN6QixpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLE9BQU8sRUFBRSxFQUFFO0tBQ1o7Q0FDRixDQUFDLENBQUMsQ0FBQyJ9
@@ -1,6 +1,3 @@
1
- import { EggAppConfig } from "egg";
2
-
3
- //#region src/config/config.local.d.ts
1
+ import type { EggAppConfig } from 'egg';
4
2
  declare const _default: EggAppConfig;
5
- //#endregion
6
- export { _default as default };
3
+ export default _default;
@@ -1,5 +1,6 @@
1
- //#region src/config/config.local.ts
2
- var config_local_default = { view: { cache: false } };
3
-
4
- //#endregion
5
- export { config_local_default as default };
1
+ export default {
2
+ view: {
3
+ cache: false,
4
+ },
5
+ };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmxvY2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWcubG9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZUFBZTtJQUNiLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSxLQUFLO0tBQ2I7Q0FDYyxDQUFDIn0=
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
- import { PlainObject, RenderOptions, ViewEngine, ViewEngineClass, ViewManager, ViewManagerConfig } from "./lib/view_manager.js";
2
- import { ContextView } from "./lib/context_view.js";
3
- export { ContextView, PlainObject, RenderOptions, ViewEngine, ViewEngineClass, ViewManager, ViewManagerConfig };
1
+ import './config/config.default.ts';
2
+ import './app/extend/application.ts';
3
+ import './app/extend/context.ts';
4
+ import './types.ts';
5
+ export * from './lib/index.ts';
package/dist/index.js CHANGED
@@ -1,8 +1,6 @@
1
1
  import "./config/config.default.js";
2
- import { ViewManager } from "./lib/view_manager.js";
3
2
  import "./app/extend/application.js";
4
- import { ContextView } from "./lib/context_view.js";
5
3
  import "./app/extend/context.js";
6
- import "./lib/index.js";
7
-
8
- export { ContextView, ViewManager };
4
+ import "./types.js";
5
+ export * from "./lib/index.js";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8seUJBQXlCLENBQUM7QUFDakMsT0FBTyxZQUFZLENBQUM7QUFFcEIsY0FBYyxnQkFBZ0IsQ0FBQyJ9
@@ -1,8 +1,5 @@
1
- import { RenderOptions, ViewEngine, ViewManager, ViewManagerConfig } from "./view_manager.js";
2
- import * as egg0 from "egg";
3
- import { Application, Context } from "egg";
4
-
5
- //#region src/lib/context_view.d.ts
1
+ import type { Context, Application } from 'egg';
2
+ import { ViewManager, type ViewManagerConfig, type RenderOptions } from './view_manager.ts';
6
3
  declare const RENDER: unique symbol;
7
4
  declare const RENDER_STRING: unique symbol;
8
5
  declare const GET_VIEW_ENGINE: unique symbol;
@@ -13,40 +10,39 @@ declare const SET_LOCALS: unique symbol;
13
10
  * It will find the view engine, and render it.
14
11
  * The view engine should be registered in {@link ViewManager}.
15
12
  */
16
- declare class ContextView {
17
- protected ctx: Context;
18
- protected app: Application;
19
- protected viewManager: ViewManager;
20
- protected config: ViewManagerConfig;
21
- constructor(ctx: Context);
22
- /**
23
- * Render a file by view engine
24
- * @param {String} name - the file path based on root
25
- * @param {Object} [locals] - data used by template
26
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
27
- * @return {Promise<String>} result - return a promise with a render result
28
- */
29
- render(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
30
- /**
31
- * Render a template string by view engine
32
- * @param {String} tpl - template string
33
- * @param {Object} [locals] - data used by template
34
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
35
- * @return {Promise<String>} result - return a promise with a render result
36
- */
37
- renderString(tpl: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
38
- [RENDER](name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
39
- [RENDER_STRING](tpl: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
40
- [GET_VIEW_ENGINE](name: string): ViewEngine;
41
- /**
42
- * set locals for view, inject `locals.ctx`, `locals.request`, `locals.helper`
43
- * @private
44
- */
45
- [SET_LOCALS](locals?: Record<string, any>): {
46
- ctx: Context;
47
- request: egg0.Request;
48
- helper: egg0.Helper;
49
- } & Record<string, any>;
13
+ export declare class ContextView {
14
+ protected ctx: Context;
15
+ protected app: Application;
16
+ protected viewManager: ViewManager;
17
+ protected config: ViewManagerConfig;
18
+ constructor(ctx: Context);
19
+ /**
20
+ * Render a file by view engine
21
+ * @param {String} name - the file path based on root
22
+ * @param {Object} [locals] - data used by template
23
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
24
+ * @return {Promise<String>} result - return a promise with a render result
25
+ */
26
+ render(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
27
+ /**
28
+ * Render a template string by view engine
29
+ * @param {String} tpl - template string
30
+ * @param {Object} [locals] - data used by template
31
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
32
+ * @return {Promise<String>} result - return a promise with a render result
33
+ */
34
+ renderString(tpl: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
35
+ [RENDER](name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
36
+ [RENDER_STRING](tpl: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
37
+ [GET_VIEW_ENGINE](name: string): import("./view_manager.ts").ViewEngine;
38
+ /**
39
+ * set locals for view, inject `locals.ctx`, `locals.request`, `locals.helper`
40
+ * @private
41
+ */
42
+ [SET_LOCALS](locals?: Record<string, any>): {
43
+ ctx: Context;
44
+ request: import("egg").Request;
45
+ helper: import("egg").Helper;
46
+ } & Record<string, any>;
50
47
  }
51
- //#endregion
52
- export { ContextView };
48
+ export {};
@@ -1,86 +1,98 @@
1
- import "./view_manager.js";
2
- import path from "node:path";
3
- import assert from "node:assert";
4
-
5
- //#region src/lib/context_view.ts
6
- const RENDER = Symbol.for("contextView#render");
7
- const RENDER_STRING = Symbol.for("contextView#renderString");
8
- const GET_VIEW_ENGINE = Symbol.for("contextView#getViewEngine");
9
- const SET_LOCALS = Symbol.for("contextView#setLocals");
1
+ import path from 'node:path';
2
+ import assert from 'node:assert';
3
+ import { ViewManager } from "./view_manager.js";
4
+ const RENDER = Symbol.for('contextView#render');
5
+ const RENDER_STRING = Symbol.for('contextView#renderString');
6
+ const GET_VIEW_ENGINE = Symbol.for('contextView#getViewEngine');
7
+ const SET_LOCALS = Symbol.for('contextView#setLocals');
10
8
  /**
11
- * View instance for each request.
12
- *
13
- * It will find the view engine, and render it.
14
- * The view engine should be registered in {@link ViewManager}.
15
- */
16
- var ContextView = class {
17
- ctx;
18
- app;
19
- viewManager;
20
- config;
21
- constructor(ctx) {
22
- this.ctx = ctx;
23
- this.app = this.ctx.app;
24
- this.viewManager = this.app.view;
25
- this.config = this.app.view.config;
26
- }
27
- /**
28
- * Render a file by view engine
29
- * @param {String} name - the file path based on root
30
- * @param {Object} [locals] - data used by template
31
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
32
- * @return {Promise<String>} result - return a promise with a render result
33
- */
34
- async render(name, locals, options) {
35
- return await this[RENDER](name, locals, options);
36
- }
37
- /**
38
- * Render a template string by view engine
39
- * @param {String} tpl - template string
40
- * @param {Object} [locals] - data used by template
41
- * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
42
- * @return {Promise<String>} result - return a promise with a render result
43
- */
44
- async renderString(tpl, locals, options) {
45
- return await this[RENDER_STRING](tpl, locals, options);
46
- }
47
- async [RENDER](name, locals, options = {}) {
48
- const filename = await this.viewManager.resolve(name);
49
- options.name = name;
50
- options.root = filename.replace(path.normalize(name), "").replace(/[/\\]$/, "");
51
- options.locals = locals;
52
- let viewEngineName = options.viewEngine;
53
- if (!viewEngineName) {
54
- const ext = path.extname(filename);
55
- viewEngineName = this.viewManager.extMap.get(ext);
56
- }
57
- if (!viewEngineName) viewEngineName = this.config.defaultViewEngine;
58
- assert(viewEngineName, `Can't find viewEngine for ${filename}`);
59
- return await this[GET_VIEW_ENGINE](viewEngineName).render(filename, this[SET_LOCALS](locals), options);
60
- }
61
- async [RENDER_STRING](tpl, locals, options) {
62
- let viewEngineName = options && options.viewEngine;
63
- if (!viewEngineName) viewEngineName = this.config.defaultViewEngine;
64
- assert(viewEngineName, "Can't find viewEngine");
65
- return await this[GET_VIEW_ENGINE](viewEngineName).renderString(tpl, this[SET_LOCALS](locals), options);
66
- }
67
- [GET_VIEW_ENGINE](name) {
68
- const ViewEngine = this.viewManager.get(name);
69
- assert(ViewEngine, `Can't find ViewEngine "${name}"`);
70
- return new ViewEngine(this.ctx);
71
- }
72
- /**
73
- * set locals for view, inject `locals.ctx`, `locals.request`, `locals.helper`
74
- * @private
75
- */
76
- [SET_LOCALS](locals) {
77
- return Object.assign({
78
- ctx: this.ctx,
79
- request: this.ctx.request,
80
- helper: this.ctx.helper
81
- }, this.ctx.locals, locals);
82
- }
83
- };
84
-
85
- //#endregion
86
- export { ContextView };
9
+ * View instance for each request.
10
+ *
11
+ * It will find the view engine, and render it.
12
+ * The view engine should be registered in {@link ViewManager}.
13
+ */
14
+ export class ContextView {
15
+ ctx;
16
+ app;
17
+ viewManager;
18
+ config;
19
+ constructor(ctx) {
20
+ this.ctx = ctx;
21
+ this.app = this.ctx.app;
22
+ this.viewManager = this.app.view;
23
+ this.config = this.app.view.config;
24
+ }
25
+ /**
26
+ * Render a file by view engine
27
+ * @param {String} name - the file path based on root
28
+ * @param {Object} [locals] - data used by template
29
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
30
+ * @return {Promise<String>} result - return a promise with a render result
31
+ */
32
+ async render(name, locals, options) {
33
+ return await this[RENDER](name, locals, options);
34
+ }
35
+ /**
36
+ * Render a template string by view engine
37
+ * @param {String} tpl - template string
38
+ * @param {Object} [locals] - data used by template
39
+ * @param {Object} [options] - view options, you can use `options.viewEngine` to specify view engine
40
+ * @return {Promise<String>} result - return a promise with a render result
41
+ */
42
+ async renderString(tpl, locals, options) {
43
+ return await this[RENDER_STRING](tpl, locals, options);
44
+ }
45
+ // ext -> viewEngineName -> viewEngine
46
+ async [RENDER](name, locals, options = {}) {
47
+ // retrieve fullpath matching name from `config.root`
48
+ const filename = await this.viewManager.resolve(name);
49
+ options.name = name;
50
+ options.root = filename.replace(path.normalize(name), '').replace(/[/\\]$/, '');
51
+ options.locals = locals;
52
+ // get the name of view engine,
53
+ // if viewEngine is specified in options, don't match extension
54
+ let viewEngineName = options.viewEngine;
55
+ if (!viewEngineName) {
56
+ const ext = path.extname(filename);
57
+ viewEngineName = this.viewManager.extMap.get(ext);
58
+ }
59
+ // use the default view engine that is configured if no matching above
60
+ if (!viewEngineName) {
61
+ viewEngineName = this.config.defaultViewEngine;
62
+ }
63
+ assert(viewEngineName, `Can't find viewEngine for ${filename}`);
64
+ // get view engine and render
65
+ const viewEngine = this[GET_VIEW_ENGINE](viewEngineName);
66
+ return await viewEngine.render(filename, this[SET_LOCALS](locals), options);
67
+ }
68
+ async [RENDER_STRING](tpl, locals, options) {
69
+ let viewEngineName = options && options.viewEngine;
70
+ if (!viewEngineName) {
71
+ viewEngineName = this.config.defaultViewEngine;
72
+ }
73
+ assert(viewEngineName, "Can't find viewEngine");
74
+ // get view engine and render
75
+ const viewEngine = this[GET_VIEW_ENGINE](viewEngineName);
76
+ return await viewEngine.renderString(tpl, this[SET_LOCALS](locals), options);
77
+ }
78
+ [GET_VIEW_ENGINE](name) {
79
+ // get view engine
80
+ const ViewEngine = this.viewManager.get(name);
81
+ assert(ViewEngine, `Can't find ViewEngine "${name}"`);
82
+ // use view engine to render
83
+ const engine = new ViewEngine(this.ctx);
84
+ return engine;
85
+ }
86
+ /**
87
+ * set locals for view, inject `locals.ctx`, `locals.request`, `locals.helper`
88
+ * @private
89
+ */
90
+ [SET_LOCALS](locals) {
91
+ return Object.assign({
92
+ ctx: this.ctx,
93
+ request: this.ctx.request,
94
+ helper: this.ctx.helper,
95
+ }, this.ctx.locals, locals);
96
+ }
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dF92aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb250ZXh0X3ZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUlqQyxPQUFPLEVBQUUsV0FBVyxFQUE4QyxNQUFNLG1CQUFtQixDQUFDO0FBRTVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNoRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDN0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ2hFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUV2RDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQ1osR0FBRyxDQUFVO0lBQ2IsR0FBRyxDQUFjO0lBQ2pCLFdBQVcsQ0FBYztJQUN6QixNQUFNLENBQW9CO0lBRXBDLFlBQVksR0FBWTtRQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFZLEVBQUUsTUFBNEIsRUFBRSxPQUF1QjtRQUM5RSxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBVyxFQUFFLE1BQTRCLEVBQUUsT0FBdUI7UUFDbkYsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBWSxFQUFFLE1BQTRCLEVBQUUsVUFBeUIsRUFBRTtRQUNwRixxREFBcUQ7UUFDckQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNwQixPQUFPLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXhCLCtCQUErQjtRQUMvQiwrREFBK0Q7UUFDL0QsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxzRUFBc0U7UUFDdEUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELENBQUM7UUFDRCxNQUFNLENBQUMsY0FBYyxFQUFFLDZCQUE2QixRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLDZCQUE2QjtRQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekQsT0FBTyxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBVyxFQUFFLE1BQTRCLEVBQUUsT0FBdUI7UUFDdEYsSUFBSSxjQUFjLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELENBQUM7UUFDRCxNQUFNLENBQUMsY0FBYyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFFaEQsNkJBQTZCO1FBQzdCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxPQUFPLE1BQU0sVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQVk7UUFDNUIsa0JBQWtCO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsMEJBQTBCLElBQUksR0FBRyxDQUFDLENBQUM7UUFFdEQsNEJBQTRCO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUE0QjtRQUN2QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCO1lBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTztZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQ3hCLEVBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQ2YsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==
@@ -1,3 +1,2 @@
1
- import { PlainObject, RenderOptions, ViewEngine, ViewEngineClass, ViewManager, ViewManagerConfig } from "./view_manager.js";
2
- import { ContextView } from "./context_view.js";
3
- export { ContextView, PlainObject, RenderOptions, ViewEngine, ViewEngineClass, ViewManager, ViewManagerConfig };
1
+ export * from './view_manager.ts';
2
+ export * from './context_view.ts';
package/dist/lib/index.js CHANGED
@@ -1,4 +1,3 @@
1
- import { ViewManager } from "./view_manager.js";
2
- import { ContextView } from "./context_view.js";
3
-
4
- export { ContextView, ViewManager };
1
+ export * from "./view_manager.js";
2
+ export * from "./context_view.js";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQyJ9
@@ -1,61 +1,57 @@
1
- import { ViewConfig } from "../config/config.default.js";
2
- import { Application, Context } from "egg";
3
-
4
- //#region src/lib/view_manager.d.ts
5
- interface ViewManagerConfig extends Omit<ViewConfig, 'root'> {
6
- root: string[];
1
+ import type { Context, Application } from 'egg';
2
+ import type { ViewConfig } from '../config/config.default.ts';
3
+ export interface ViewManagerConfig extends Omit<ViewConfig, 'root'> {
4
+ root: string[];
7
5
  }
8
- type PlainObject<T = any> = {
9
- [key: string]: T;
6
+ export type PlainObject<T = any> = {
7
+ [key: string]: T;
10
8
  };
11
- interface RenderOptions extends PlainObject {
12
- name?: string;
13
- root?: string;
14
- locals?: PlainObject;
15
- viewEngine?: string;
9
+ export interface RenderOptions extends PlainObject {
10
+ name?: string;
11
+ root?: string;
12
+ locals?: PlainObject;
13
+ viewEngine?: string;
16
14
  }
17
- interface ViewEngine {
18
- render: (name: string, locals?: Record<string, any>, options?: RenderOptions) => Promise<string>;
19
- renderString: (tpl: string, locals?: Record<string, any>, options?: RenderOptions) => Promise<string>;
15
+ export interface ViewEngine {
16
+ render: (name: string, locals?: Record<string, any>, options?: RenderOptions) => Promise<string>;
17
+ renderString: (tpl: string, locals?: Record<string, any>, options?: RenderOptions) => Promise<string>;
20
18
  }
21
- type ViewEngineClass = new (app: Context) => ViewEngine;
19
+ export type ViewEngineClass = new (app: Context) => ViewEngine;
22
20
  /**
23
21
  * ViewManager will manage all view engine that is registered.
24
22
  *
25
23
  * It can find the real file, then retrieve the view engine based on extension.
26
24
  * The plugin just register view engine using {@link ViewManager#use}
27
25
  */
28
- declare class ViewManager extends Map<string, ViewEngineClass> {
29
- config: ViewManagerConfig;
30
- extMap: Map<string, string>;
31
- fileMap: Map<string, string>;
32
- /**
33
- * @param {Application} app - application instance
34
- */
35
- constructor(app: Application);
36
- /**
37
- * This method can register view engine.
38
- *
39
- * You can define a view engine class contains two method, `render` and `renderString`
40
- *
41
- * ```js
42
- * class View {
43
- * render() {}
44
- * renderString() {}
45
- * }
46
- * ```
47
- * @param {String} name - the name of view engine
48
- * @param {Object} viewEngine - the class of view engine
49
- */
50
- use(name: string, viewEngine: ViewEngineClass): void;
51
- /**
52
- * Resolve the path based on the given name,
53
- * if the name is `user.html` and root is `app/view` (by default),
54
- * it will return `app/view/user.html`
55
- * @param {String} name - the given path name, it's relative to config.root
56
- * @return {String} filename - the full path
57
- */
58
- resolve(name: string): Promise<string>;
26
+ export declare class ViewManager extends Map<string, ViewEngineClass> {
27
+ config: ViewManagerConfig;
28
+ extMap: Map<string, string>;
29
+ fileMap: Map<string, string>;
30
+ /**
31
+ * @param {Application} app - application instance
32
+ */
33
+ constructor(app: Application);
34
+ /**
35
+ * This method can register view engine.
36
+ *
37
+ * You can define a view engine class contains two method, `render` and `renderString`
38
+ *
39
+ * ```js
40
+ * class View {
41
+ * render() {}
42
+ * renderString() {}
43
+ * }
44
+ * ```
45
+ * @param {String} name - the name of view engine
46
+ * @param {Object} viewEngine - the class of view engine
47
+ */
48
+ use(name: string, viewEngine: ViewEngineClass): void;
49
+ /**
50
+ * Resolve the path based on the given name,
51
+ * if the name is `user.html` and root is `app/view` (by default),
52
+ * it will return `app/view/user.html`
53
+ * @param {String} name - the given path name, it's relative to config.root
54
+ * @return {String} filename - the full path
55
+ */
56
+ resolve(name: string): Promise<string>;
59
57
  }
60
- //#endregion
61
- export { PlainObject, RenderOptions, ViewEngine, ViewEngineClass, ViewManager, ViewManagerConfig };
@@ -1,83 +1,89 @@
1
- import path from "node:path";
2
- import assert from "node:assert";
3
- import { existsSync } from "node:fs";
4
- import { exists } from "utility";
5
- import { isGeneratorFunction } from "is-type-of";
6
-
7
- //#region src/lib/view_manager.ts
1
+ import assert from 'node:assert';
2
+ import path from 'node:path';
3
+ import { existsSync } from 'node:fs';
4
+ import { exists } from 'utility';
5
+ import { isGeneratorFunction } from 'is-type-of';
8
6
  /**
9
- * ViewManager will manage all view engine that is registered.
10
- *
11
- * It can find the real file, then retrieve the view engine based on extension.
12
- * The plugin just register view engine using {@link ViewManager#use}
13
- */
14
- var ViewManager = class extends Map {
15
- config;
16
- extMap;
17
- fileMap;
18
- /**
19
- * @param {Application} app - application instance
20
- */
21
- constructor(app) {
22
- super();
23
- this.config = app.config.view;
24
- this.config.root = app.config.view.root.split(/\s*,\s*/g).filter((filepath) => existsSync(filepath));
25
- this.extMap = /* @__PURE__ */ new Map();
26
- this.fileMap = /* @__PURE__ */ new Map();
27
- for (const ext of Object.keys(this.config.mapping)) this.extMap.set(ext, this.config.mapping[ext]);
28
- }
29
- /**
30
- * This method can register view engine.
31
- *
32
- * You can define a view engine class contains two method, `render` and `renderString`
33
- *
34
- * ```js
35
- * class View {
36
- * render() {}
37
- * renderString() {}
38
- * }
39
- * ```
40
- * @param {String} name - the name of view engine
41
- * @param {Object} viewEngine - the class of view engine
42
- */
43
- use(name, viewEngine) {
44
- assert(name, "name is required");
45
- assert(!this.has(name), `${name} has been registered`);
46
- assert(viewEngine, "viewEngine is required");
47
- assert(viewEngine.prototype.render, "viewEngine should implement `render` method");
48
- assert(!isGeneratorFunction(viewEngine.prototype.render), "viewEngine `render` method should not be generator function");
49
- assert(viewEngine.prototype.renderString, "viewEngine should implement `renderString` method");
50
- assert(!isGeneratorFunction(viewEngine.prototype.renderString), "viewEngine `renderString` method should not be generator function");
51
- this.set(name, viewEngine);
52
- }
53
- /**
54
- * Resolve the path based on the given name,
55
- * if the name is `user.html` and root is `app/view` (by default),
56
- * it will return `app/view/user.html`
57
- * @param {String} name - the given path name, it's relative to config.root
58
- * @return {String} filename - the full path
59
- */
60
- async resolve(name) {
61
- const config = this.config;
62
- let filename = this.fileMap.get(name);
63
- if (config.cache && filename) return filename;
64
- filename = await resolvePath([name, name + config.defaultExtension], config.root);
65
- assert(filename, `Can't find ${name} from ${config.root.join(",")}`);
66
- this.fileMap.set(name, filename);
67
- return filename;
68
- }
69
- };
7
+ * ViewManager will manage all view engine that is registered.
8
+ *
9
+ * It can find the real file, then retrieve the view engine based on extension.
10
+ * The plugin just register view engine using {@link ViewManager#use}
11
+ */
12
+ export class ViewManager extends Map {
13
+ config;
14
+ extMap;
15
+ fileMap;
16
+ /**
17
+ * @param {Application} app - application instance
18
+ */
19
+ constructor(app) {
20
+ super();
21
+ this.config = app.config.view;
22
+ this.config.root = app.config.view.root.split(/\s*,\s*/g).filter(filepath => existsSync(filepath));
23
+ this.extMap = new Map();
24
+ this.fileMap = new Map();
25
+ for (const ext of Object.keys(this.config.mapping)) {
26
+ this.extMap.set(ext, this.config.mapping[ext]);
27
+ }
28
+ }
29
+ /**
30
+ * This method can register view engine.
31
+ *
32
+ * You can define a view engine class contains two method, `render` and `renderString`
33
+ *
34
+ * ```js
35
+ * class View {
36
+ * render() {}
37
+ * renderString() {}
38
+ * }
39
+ * ```
40
+ * @param {String} name - the name of view engine
41
+ * @param {Object} viewEngine - the class of view engine
42
+ */
43
+ use(name, viewEngine) {
44
+ assert(name, 'name is required');
45
+ assert(!this.has(name), `${name} has been registered`);
46
+ assert(viewEngine, 'viewEngine is required');
47
+ assert(viewEngine.prototype.render, 'viewEngine should implement `render` method');
48
+ assert(!isGeneratorFunction(viewEngine.prototype.render), 'viewEngine `render` method should not be generator function');
49
+ assert(viewEngine.prototype.renderString, 'viewEngine should implement `renderString` method');
50
+ assert(!isGeneratorFunction(viewEngine.prototype.renderString), 'viewEngine `renderString` method should not be generator function');
51
+ this.set(name, viewEngine);
52
+ }
53
+ /**
54
+ * Resolve the path based on the given name,
55
+ * if the name is `user.html` and root is `app/view` (by default),
56
+ * it will return `app/view/user.html`
57
+ * @param {String} name - the given path name, it's relative to config.root
58
+ * @return {String} filename - the full path
59
+ */
60
+ async resolve(name) {
61
+ const config = this.config;
62
+ // check cache
63
+ let filename = this.fileMap.get(name);
64
+ if (config.cache && filename)
65
+ return filename;
66
+ // try find it with default extension
67
+ filename = await resolvePath([name, name + config.defaultExtension], config.root);
68
+ assert(filename, `Can't find ${name} from ${config.root.join(',')}`);
69
+ // set cache
70
+ this.fileMap.set(name, filename);
71
+ return filename;
72
+ }
73
+ }
70
74
  async function resolvePath(names, root) {
71
- for (const name of names) for (const dir of root) {
72
- const filename = path.join(dir, name);
73
- if (await exists(filename)) {
74
- if (inpath(dir, filename)) return filename;
75
- }
76
- }
75
+ for (const name of names) {
76
+ for (const dir of root) {
77
+ const filename = path.join(dir, name);
78
+ if (await exists(filename)) {
79
+ if (inpath(dir, filename)) {
80
+ return filename;
81
+ }
82
+ }
83
+ }
84
+ }
77
85
  }
78
86
  function inpath(parent, sub) {
79
- return sub.indexOf(parent) > -1;
87
+ return sub.indexOf(parent) > -1;
80
88
  }
81
-
82
- //#endregion
83
- export { ViewManager };
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi92aWV3X21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFakMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBd0JqRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsR0FBNEI7SUFDM0QsTUFBTSxDQUFvQjtJQUMxQixNQUFNLENBQXNCO0lBQzVCLE9BQU8sQ0FBc0I7SUFFN0I7O09BRUc7SUFDSCxZQUFZLEdBQWdCO1FBQzFCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25HLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxD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
package/dist/types.d.ts CHANGED
@@ -1,28 +1,26 @@
1
- import { ViewConfig } from "./config/config.default.js";
2
- import { RenderOptions, ViewManager } from "./lib/view_manager.js";
3
- import { ContextView } from "./lib/context_view.js";
4
-
5
- //#region src/types.d.ts
1
+ import type { ViewConfig } from './config/config.default.ts';
2
+ import type { ContextView } from './lib/context_view.ts';
3
+ import type { RenderOptions, ViewManager } from './lib/view_manager.ts';
6
4
  declare module 'egg' {
7
- interface EggAppConfig {
8
- /**
9
- * view default config
10
- * @member Config#view
11
- * @property {String} [root=${baseDir}/app/view] - give a path to find the file, you can specify multiple path with `,` delimiter
12
- * @property {Boolean} [cache=true] - whether cache the file's path
13
- * @property {String} [defaultExtension] - defaultExtension can be added automatically when there is no extension when call `ctx.render`
14
- * @property {String} [defaultViewEngine] - set the default view engine if you don't want specify the viewEngine every request.
15
- * @property {Object} mapping - map the file extension to view engine, such as `{ '.ejs': 'ejs' }`
16
- */
17
- view: ViewConfig;
18
- }
19
- interface Application {
20
- get view(): ViewManager;
21
- }
22
- interface Context {
23
- view: ContextView;
24
- render(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<void>;
25
- renderView(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
26
- renderString(tpl: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
27
- }
28
- }
5
+ interface EggAppConfig {
6
+ /**
7
+ * view default config
8
+ * @member Config#view
9
+ * @property {String} [root=${baseDir}/app/view] - give a path to find the file, you can specify multiple path with `,` delimiter
10
+ * @property {Boolean} [cache=true] - whether cache the file's path
11
+ * @property {String} [defaultExtension] - defaultExtension can be added automatically when there is no extension when call `ctx.render`
12
+ * @property {String} [defaultViewEngine] - set the default view engine if you don't want specify the viewEngine every request.
13
+ * @property {Object} mapping - map the file extension to view engine, such as `{ '.ejs': 'ejs' }`
14
+ */
15
+ view: ViewConfig;
16
+ }
17
+ interface Application {
18
+ get view(): ViewManager;
19
+ }
20
+ interface Context {
21
+ view: ContextView;
22
+ render(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<void>;
23
+ renderView(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
24
+ renderString(tpl: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
25
+ }
26
+ }
package/dist/types.js CHANGED
@@ -1 +1,2 @@
1
- export { };
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/view",
3
- "version": "4.0.0-beta.19",
3
+ "version": "4.0.0-beta.21",
4
4
  "description": "Base view plugin for egg",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -51,19 +51,19 @@
51
51
  "utility": "^2.5.0"
52
52
  },
53
53
  "peerDependencies": {
54
- "egg": "4.1.0-beta.19"
54
+ "egg": "4.1.0-beta.21"
55
55
  },
56
56
  "devDependencies": {
57
57
  "tsdown": "^0.15.4",
58
58
  "typescript": "^5.9.3",
59
59
  "vitest": "4.0.0-beta.16",
60
- "@eggjs/mock": "7.0.0-beta.19",
61
- "@eggjs/tsconfig": "3.1.0-beta.19"
60
+ "@eggjs/tsconfig": "3.1.0-beta.21",
61
+ "@eggjs/mock": "7.0.0-beta.21"
62
62
  },
63
63
  "scripts": {
64
64
  "lint": "oxlint --type-aware",
65
65
  "typecheck": "tsc --noEmit",
66
66
  "test": "vitest run",
67
- "build": "tsdown"
67
+ "build": "tsdown && rimraf dist && tsc -b --clean && tsc"
68
68
  }
69
69
  }