@eggjs/view 4.0.0-beta.27 → 4.0.0-beta.29

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/README.md CHANGED
@@ -19,36 +19,42 @@ npm i @eggjs/view
19
19
  ## Usage
20
20
 
21
21
  ```js
22
- // {app_root}/config/plugin.js
23
- exports.view = {
24
- enable: true,
25
- package: '@eggjs/view',
22
+ // {app_root}/config/plugin.ts
23
+ export default {
24
+ view: {
25
+ enable: true,
26
+ package: '@eggjs/view',
27
+ },
26
28
  };
27
29
  ```
28
30
 
29
31
  ## Use a template engine
30
32
 
31
- [egg-view] don't have build-in view engine, So you should choose a template engine like [ejs], and install [egg-view-ejs] plugin.
33
+ [@eggjs/view] don't have build-in view engine, So you should choose a template engine like [ejs], and install [egg-view-ejs] plugin.
32
34
 
33
35
  You can choose a template engine first, link [ejs], so we use [egg-view-ejs] plugin.
34
36
 
35
37
  `egg-view` is in [eggjs], so you just need configure [egg-view-ejs].
36
38
 
37
39
  ```js
38
- // config/plugin.js
39
- exports.ejs = {
40
- enable: true,
41
- package: 'egg-view-ejs',
40
+ // config/plugin.ts
41
+ export default {
42
+ ejs: {
43
+ enable: true,
44
+ package: 'egg-view-ejs',
45
+ },
42
46
  };
43
47
  ```
44
48
 
45
49
  Configure the mapping, the file with `.ejs` extension will be rendered by ejs.
46
50
 
47
51
  ```js
48
- // config/config.default.js
49
- exports.view = {
50
- mapping: {
51
- '.ejs': 'ejs',
52
+ // config/config.default.ts
53
+ export default {
54
+ view: {
55
+ mapping: {
56
+ '.ejs': 'ejs',
57
+ },
52
58
  },
53
59
  };
54
60
  ```
@@ -56,20 +62,20 @@ exports.view = {
56
62
  In controller, you can call `ctx.render`.
57
63
 
58
64
  ```js
59
- module.exports = app => {
65
+ export default (app: Application) => {
60
66
  return class UserController extends app.Controller {
61
67
  async list() {
62
68
  const { ctx } = this;
63
69
  await ctx.render('user.ejs');
64
70
  }
65
71
  };
66
- };
72
+ }
67
73
  ```
68
74
 
69
75
  If you call `ctx.renderString`, you should specify viewEngine in viewOptions.
70
76
 
71
77
  ```js
72
- module.exports = app => {
78
+ export default (app: Application) => {
73
79
  return class UserController extends app.Controller {
74
80
  async list() {
75
81
  const { ctx } = this;
@@ -82,7 +88,7 @@ module.exports = app => {
82
88
  );
83
89
  }
84
90
  };
85
- };
91
+ }
86
92
  ```
87
93
 
88
94
  ## Use multiple view engine
@@ -94,11 +100,27 @@ If you want add another template engine like [nunjucks], then you can add [egg-v
94
100
  Configure the plugin and mapping
95
101
 
96
102
  ```js
97
- // config/config.default.js
98
- exports.view = {
99
- mapping: {
100
- '.ejs': 'ejs',
101
- '.nj': 'nunjucks',
103
+ // config/plugin.ts
104
+ export default {
105
+ ejs: {
106
+ enable: true,
107
+ package: 'egg-view-ejs',
108
+ },
109
+ nunjucks: {
110
+ enable: true,
111
+ package: 'egg-view-nunjucks',
112
+ },
113
+ };
114
+ ```
115
+
116
+ ```js
117
+ // config/config.default.ts
118
+ export default {
119
+ view: {
120
+ mapping: {
121
+ '.ejs': 'ejs',
122
+ '.nj': 'nunjucks',
123
+ },
102
124
  },
103
125
  };
104
126
  ```
@@ -111,28 +133,29 @@ await ctx.render('user.nj');
111
133
 
112
134
  ## How to write a view plugin
113
135
 
114
- You can use [egg-view]' API to register a plugin.
136
+ You can use [@eggjs/view]'s API to register a plugin.
115
137
 
116
138
  ### View engine
117
139
 
118
- Create a view engine class first, and implement `render` and `renderString`, if the template engine don't support, just throw an error. The view engine is context level, so it receive ctx in `constructor`.
140
+ Create a view engine class first, and implement `render` and `renderString`, if the template engine don't support, just throw an error.
141
+ The view engine is context level, so it receive ctx in `constructor`.
119
142
 
120
143
  ```js
121
- // lib/view.js
122
- module.exports = class MyView {
144
+ // lib/view.ts
145
+ export default class MyView {
123
146
  constructor(ctx) {
124
147
  // do some initialize
125
148
  // get the plugin config from `ctx.app.config`
126
149
  }
127
150
 
128
- async render(fullpath, locals) {
151
+ async render(fullpath: string, locals: Record<string, any>) {
129
152
  return myengine.render(fullpath, locals);
130
153
  }
131
154
 
132
155
  async renderString() {
133
156
  throw new Error('not implement');
134
157
  }
135
- };
158
+ }
136
159
  ```
137
160
 
138
161
  `render` and `renderString` support generator function, async function, or normal function return a promise.
@@ -178,17 +201,20 @@ These methods receive three arguments, `renderString` will pass tpl as the first
178
201
  After define a view engine, you can register it.
179
202
 
180
203
  ```js
181
- // app.js
182
- module.exports = app => {
183
- app.view.use('myName', require('./lib/view'));
184
- };
204
+ // app.ts
205
+ import type { Application } from 'egg';
206
+ import MyView from './lib/view';
207
+
208
+ export default (app: Application) => {
209
+ app.view.use('myName', MyView);
210
+ }
185
211
  ```
186
212
 
187
213
  You can define a view engine name, normally it's a template name.
188
214
 
189
215
  ### Configure
190
216
 
191
- Define plugin name and depend on [egg-view]
217
+ Define plugin name and depend on [@eggjs/view]
192
218
 
193
219
  ```json
194
220
  {
@@ -199,10 +225,12 @@ Define plugin name and depend on [egg-view]
199
225
  }
200
226
  ```
201
227
 
202
- Set default config in `config/config.default.js`, the name is equals to plugin name.
228
+ Set default config in `config/config.default.ts`, the name is equals to plugin name.
203
229
 
204
230
  ```js
205
- exports.myName = {},
231
+ export default {
232
+ myName: {},
233
+ };
206
234
  ```
207
235
 
208
236
  See some examples
@@ -214,39 +242,43 @@ See some examples
214
242
 
215
243
  ### Root
216
244
 
217
- Root is `${baseDir}/app/view` by default, but you can define multiple directory, seperated by `,`. [egg-view] will find a file from all root directories.
245
+ Root is `${baseDir}/app/view` by default, but you can define multiple directory, seperated by `,`.
246
+ [@eggjs/view] will find a file from all root directories.
218
247
 
219
248
  ```js
220
- module.exports = appInfo => {
249
+ export default (appInfo: EggAppInfo) => {
221
250
  const baseDir = appInfo.baseDir;
222
251
  return {
223
252
  view: {
224
253
  root: `${baseDir}/app/view,${baseDir}/app/view2`,
225
254
  },
226
255
  };
227
- };
256
+ }
228
257
  ```
229
258
 
230
259
  ### defaultExtension
231
260
 
232
- When render a file, you should specify a extension that let [egg-view] know whitch engine you want to use. However you can define `defaultExtension` without write the extension.
261
+ When render a file, you should specify a extension that let [@eggjs/view] know whitch engine you want to use.
262
+ However you can define `defaultExtension` without write the extension.
233
263
 
234
264
  ```js
235
- // config/config.default.js
236
- exports.view = {
237
- defaultExtension: '.html',
265
+ // config/config.default.ts
266
+ export default {
267
+ view: {
268
+ defaultExtension: '.html',
269
+ },
238
270
  };
239
271
 
240
272
  // controller
241
- module.exports = app => {
273
+ export default (app: Application) => {
242
274
  return class UserController extends app.Controller {
243
275
  async list() {
244
276
  const { ctx } = this;
245
277
  // render user.html
246
278
  await ctx.render('user');
247
279
  }
248
- };
249
- };
280
+ }
281
+ }
250
282
  ```
251
283
 
252
284
  ### viewEngine and defaultViewEngine
@@ -256,9 +288,11 @@ If you are using `renderString`, you should specify viewEngine in view config, s
256
288
  However, you can define `defaultViewEngine` without set each time.
257
289
 
258
290
  ```js
259
- // config/config.default.js
260
- exports.view = {
261
- defaultViewEngine: 'ejs',
291
+ // config/config.default.ts
292
+ export default {
293
+ view: {
294
+ defaultViewEngine: 'ejs',
295
+ },
262
296
  };
263
297
  ```
264
298
 
@@ -281,6 +315,6 @@ Made with [contributors-img](https://contrib.rocks).
281
315
  [eggjs]: https://eggjs.org
282
316
  [ejs]: https://github.com/mde/ejs
283
317
  [egg-view-ejs]: https://github.com/eggjs/egg-view-ejs
284
- [egg-view]: https://github.com/eggjs/view
318
+ [@eggjs/view]: https://github.com/eggjs/egg/tree/next/plugins/view
285
319
  [nunjucks]: http://mozilla.github.io/nunjucks
286
320
  [egg-view-nunjucks]: https://github.com/eggjs/egg-view-nunjucks
@@ -1,12 +1,9 @@
1
1
  import { Application } from 'egg';
2
2
  import { ViewManager } from '../../lib/view_manager.ts';
3
- declare const VIEW: unique symbol;
4
3
  export default class ViewApplication extends Application {
5
- [VIEW]: ViewManager;
6
4
  /**
7
5
  * Retrieve ViewManager instance
8
6
  * @member {ViewManager} Application#view
9
7
  */
10
8
  get view(): ViewManager;
11
9
  }
12
- export {};
@@ -2,7 +2,6 @@ import { Application } from 'egg';
2
2
  import { ViewManager } from "../../lib/view_manager.js";
3
3
  const VIEW = Symbol('Application#view');
4
4
  export default class ViewApplication extends Application {
5
- [VIEW];
6
5
  /**
7
6
  * Retrieve ViewManager instance
8
7
  * @member {ViewManager} Application#view
@@ -14,4 +13,4 @@ export default class ViewApplication extends Application {
14
13
  return this[VIEW];
15
14
  }
16
15
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUV4QyxNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWdCLFNBQVEsV0FBVztJQUN0RCxDQUFDLElBQUksQ0FBQyxDQUFjO0lBRXBCOzs7T0FHRztJQUNILElBQUksSUFBSTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiJ9
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUV4QyxNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWdCLFNBQVEsV0FBVztJQUN0RDs7O09BR0c7SUFDSCxJQUFJLElBQUk7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQWdCLENBQUM7SUFDbkMsQ0FBQztDQUNGIn0=
@@ -1,9 +1,7 @@
1
1
  import { Context } from 'egg';
2
2
  import { ContextView } from '../../lib/context_view.ts';
3
3
  import { type RenderOptions } from '../../lib/view_manager.ts';
4
- declare const VIEW: unique symbol;
5
4
  export default class ViewContext extends Context {
6
- [VIEW]: ContextView;
7
5
  /**
8
6
  * Render a file by view engine, then set to body
9
7
  * @param {String} name - the file path based on root
@@ -33,4 +31,3 @@ export default class ViewContext extends Context {
33
31
  */
34
32
  get view(): ContextView;
35
33
  }
36
- export {};
@@ -3,7 +3,6 @@ import { ContextView } from "../../lib/context_view.js";
3
3
  import {} from "../../lib/view_manager.js";
4
4
  const VIEW = Symbol('Context#view');
5
5
  export default class ViewContext extends Context {
6
- [VIEW];
7
6
  /**
8
7
  * Render a file by view engine, then set to body
9
8
  * @param {String} name - the file path based on root
@@ -45,4 +44,4 @@ export default class ViewContext extends Context {
45
44
  return this[VIEW];
46
45
  }
47
46
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUU5QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFzQixNQUFNLDJCQUEyQixDQUFDO0FBRS9ELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVwQyxNQUFNLENBQUMsT0FBTyxPQUFPLFdBQVksU0FBUSxPQUFPO0lBQzlDLENBQUMsSUFBSSxDQUFDLENBQWM7SUFFcEI7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQVksRUFBRSxNQUE0QixFQUFFLE9BQXVCO1FBQzlFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVksRUFBRSxNQUE0QixFQUFFLE9BQXVCO1FBQ2xGLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQVcsRUFBRSxNQUE0QixFQUFFLE9BQXVCO1FBQ25GLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLElBQUk7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0YifQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUU5QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFzQixNQUFNLDJCQUEyQixDQUFDO0FBRS9ELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVwQyxNQUFNLENBQUMsT0FBTyxPQUFPLFdBQVksU0FBUSxPQUFPO0lBQzlDOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFZLEVBQUUsTUFBNEIsRUFBRSxPQUF1QjtRQUM5RSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFZLEVBQUUsTUFBNEIsRUFBRSxPQUF1QjtRQUNsRixPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFXLEVBQUUsTUFBNEIsRUFBRSxPQUF1QjtRQUNuRixPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFnQixDQUFDO0lBQ25DLENBQUM7Q0FDRiJ9
@@ -1,3 +1,4 @@
1
+ import { type EggConfigFactory } from 'egg';
1
2
  export interface ViewConfig {
2
3
  /**
3
4
  * give a path to find the file, you can specify multiple path with `,` delimiter
@@ -25,5 +26,5 @@ export interface ViewConfig {
25
26
  */
26
27
  mapping: Record<string, string>;
27
28
  }
28
- declare const _default: import("egg").EggConfigFactory;
29
- export default _default;
29
+ declare const config: EggConfigFactory;
30
+ export default config;
@@ -1,6 +1,6 @@
1
1
  import path from 'node:path';
2
2
  import { defineConfigFactory } from 'egg';
3
- export default defineConfigFactory(appInfo => ({
3
+ const config = defineConfigFactory(appInfo => ({
4
4
  view: {
5
5
  root: path.join(appInfo.baseDir, 'app/view'),
6
6
  cache: true,
@@ -9,4 +9,5 @@ export default defineConfigFactory(appInfo => ({
9
9
  mapping: {},
10
10
  },
11
11
  }));
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxLQUFLLENBQUM7QUE4QjFDLGVBQWUsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO1FBQzVDLEtBQUssRUFBRSxJQUFJO1FBQ1gsZ0JBQWdCLEVBQUUsT0FBTztRQUN6QixpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLE9BQU8sRUFBRSxFQUFFO0tBQ1o7Q0FDRixDQUFDLENBQUMsQ0FBQyJ9
12
+ export default config;
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsbUJBQW1CLEVBQXlCLE1BQU0sS0FBSyxDQUFDO0FBOEJqRSxNQUFNLE1BQU0sR0FBcUIsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO1FBQzVDLEtBQUssRUFBRSxJQUFJO1FBQ1gsZ0JBQWdCLEVBQUUsT0FBTztRQUN6QixpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLE9BQU8sRUFBRSxFQUFFO0tBQ1o7Q0FDRixDQUFDLENBQUMsQ0FBQztBQUVKLGVBQWUsTUFBTSxDQUFDIn0=
@@ -1,9 +1,5 @@
1
1
  import type { Context, Application } from 'egg';
2
2
  import { ViewManager, type ViewManagerConfig, type RenderOptions } from './view_manager.ts';
3
- declare const RENDER: unique symbol;
4
- declare const RENDER_STRING: unique symbol;
5
- declare const GET_VIEW_ENGINE: unique symbol;
6
- declare const SET_LOCALS: unique symbol;
7
3
  /**
8
4
  * View instance for each request.
9
5
  *
@@ -32,17 +28,12 @@ export declare class ContextView {
32
28
  * @return {Promise<String>} result - return a promise with a render result
33
29
  */
34
30
  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;
31
+ private _render;
32
+ private _renderString;
33
+ private _getViewEngine;
38
34
  /**
39
35
  * set locals for view, inject `locals.ctx`, `locals.request`, `locals.helper`
40
36
  * @private
41
37
  */
42
- [SET_LOCALS](locals?: Record<string, any>): {
43
- ctx: Context;
44
- request: import("egg").Request;
45
- helper: import("egg").Helper;
46
- } & Record<string, any>;
38
+ private _setLocals;
47
39
  }
48
- export {};
@@ -1,10 +1,6 @@
1
1
  import path from 'node:path';
2
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');
3
+ import { ViewManager, ViewEngineBase } from "./view_manager.js";
8
4
  /**
9
5
  * View instance for each request.
10
6
  *
@@ -30,7 +26,7 @@ export class ContextView {
30
26
  * @return {Promise<String>} result - return a promise with a render result
31
27
  */
32
28
  async render(name, locals, options) {
33
- return await this[RENDER](name, locals, options);
29
+ return await this._render(name, locals, options);
34
30
  }
35
31
  /**
36
32
  * Render a template string by view engine
@@ -40,10 +36,10 @@ export class ContextView {
40
36
  * @return {Promise<String>} result - return a promise with a render result
41
37
  */
42
38
  async renderString(tpl, locals, options) {
43
- return await this[RENDER_STRING](tpl, locals, options);
39
+ return await this._renderString(tpl, locals, options);
44
40
  }
45
41
  // ext -> viewEngineName -> viewEngine
46
- async [RENDER](name, locals, options = {}) {
42
+ async _render(name, locals, options = {}) {
47
43
  // retrieve fullpath matching name from `config.root`
48
44
  const filename = await this.viewManager.resolve(name);
49
45
  options.name = name;
@@ -62,32 +58,32 @@ export class ContextView {
62
58
  }
63
59
  assert(viewEngineName, `Can't find viewEngine for ${filename}`);
64
60
  // get view engine and render
65
- const viewEngine = this[GET_VIEW_ENGINE](viewEngineName);
66
- return await viewEngine.render(filename, this[SET_LOCALS](locals), options);
61
+ const viewEngine = this._getViewEngine(viewEngineName);
62
+ return await viewEngine.render(filename, this._setLocals(locals), options);
67
63
  }
68
- async [RENDER_STRING](tpl, locals, options) {
64
+ async _renderString(tpl, locals, options) {
69
65
  let viewEngineName = options && options.viewEngine;
70
66
  if (!viewEngineName) {
71
67
  viewEngineName = this.config.defaultViewEngine;
72
68
  }
73
69
  assert(viewEngineName, "Can't find viewEngine");
74
70
  // get view engine and render
75
- const viewEngine = this[GET_VIEW_ENGINE](viewEngineName);
76
- return await viewEngine.renderString(tpl, this[SET_LOCALS](locals), options);
71
+ const viewEngine = this._getViewEngine(viewEngineName);
72
+ return await viewEngine.renderString(tpl, this._setLocals(locals), options);
77
73
  }
78
- [GET_VIEW_ENGINE](name) {
74
+ _getViewEngine(name) {
79
75
  // get view engine
80
- const ViewEngine = this.viewManager.get(name);
81
- assert(ViewEngine, `Can't find ViewEngine "${name}"`);
76
+ const ViewEngineImpl = this.viewManager.get(name);
77
+ assert(ViewEngineImpl, `Can't find ViewEngine "${name}"`);
82
78
  // use view engine to render
83
- const engine = new ViewEngine(this.ctx);
79
+ const engine = Reflect.construct(ViewEngineImpl, [this.ctx]);
84
80
  return engine;
85
81
  }
86
82
  /**
87
83
  * set locals for view, inject `locals.ctx`, `locals.request`, `locals.helper`
88
84
  * @private
89
85
  */
90
- [SET_LOCALS](locals) {
86
+ _setLocals(locals) {
91
87
  return Object.assign({
92
88
  ctx: this.ctx,
93
89
  request: this.ctx.request,
@@ -95,4 +91,4 @@ export class ContextView {
95
91
  }, this.ctx.locals, locals);
96
92
  }
97
93
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dF92aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb250ZXh0X3ZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUlqQyxPQUFPLEVBQUUsV0FBVyxFQUE4QyxNQUFNLG1CQUFtQixDQUFDO0FBRTVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNoRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDN0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ2hFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUV2RDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQ1osR0FBRyxDQUFVO0lBQ2IsR0FBRyxDQUFjO0lBQ2pCLFdBQVcsQ0FBYztJQUN6QixNQUFNLENBQW9CO0lBRXBDLFlBQVksR0FBWTtRQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFZLEVBQUUsTUFBNEIsRUFBRSxPQUF1QjtRQUM5RSxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxD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
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dF92aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb250ZXh0X3ZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUlqQyxPQUFPLEVBQUUsV0FBVyxFQUE4QyxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU1Rzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQ1osR0FBRyxDQUFVO0lBQ2IsR0FBRyxDQUFjO0lBQ2pCLFdBQVcsQ0FBYztJQUN6QixNQUFNLENBQW9CO0lBRXBDLFlBQVksR0FBWTtRQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFZLEVBQUUsTUFBNEIsRUFBRSxPQUF1QjtRQUM5RSxPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQVcsRUFBRSxNQUE0QixFQUFFLE9BQXVCO1FBQ25GLE9BQU8sTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELHNDQUFzQztJQUM5QixLQUFLLENBQUMs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
@@ -12,18 +12,20 @@ export interface RenderOptions extends PlainObject {
12
12
  locals?: PlainObject;
13
13
  viewEngine?: string;
14
14
  }
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>;
15
+ export declare abstract class ViewEngineBase {
16
+ ctx: Context;
17
+ app: Application;
18
+ constructor(ctx: Context);
19
+ abstract render(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
20
+ abstract renderString(tpl: string, locals?: Record<string, any>, options?: RenderOptions): Promise<string>;
18
21
  }
19
- export type ViewEngineClass = new (app: Context) => ViewEngine;
20
22
  /**
21
23
  * ViewManager will manage all view engine that is registered.
22
24
  *
23
25
  * It can find the real file, then retrieve the view engine based on extension.
24
26
  * The plugin just register view engine using {@link ViewManager#use}
25
27
  */
26
- export declare class ViewManager extends Map<string, ViewEngineClass> {
28
+ export declare class ViewManager extends Map<string, typeof ViewEngineBase> {
27
29
  config: ViewManagerConfig;
28
30
  extMap: Map<string, string>;
29
31
  fileMap: Map<string, string>;
@@ -45,7 +47,7 @@ export declare class ViewManager extends Map<string, ViewEngineClass> {
45
47
  * @param {String} name - the name of view engine
46
48
  * @param {Object} viewEngine - the class of view engine
47
49
  */
48
- use(name: string, viewEngine: ViewEngineClass): void;
50
+ use(name: string, viewEngine: typeof ViewEngineBase): void;
49
51
  /**
50
52
  * Resolve the path based on the given name,
51
53
  * if the name is `user.html` and root is `app/view` (by default),
@@ -3,6 +3,14 @@ import path from 'node:path';
3
3
  import { existsSync } from 'node:fs';
4
4
  import { exists } from 'utility';
5
5
  import { isGeneratorFunction } from 'is-type-of';
6
+ export class ViewEngineBase {
7
+ ctx;
8
+ app;
9
+ constructor(ctx) {
10
+ this.ctx = ctx;
11
+ this.app = ctx.app;
12
+ }
13
+ }
6
14
  /**
7
15
  * ViewManager will manage all view engine that is registered.
8
16
  *
@@ -86,4 +94,4 @@ async function resolvePath(names, root) {
86
94
  function inpath(parent, sub) {
87
95
  return sub.indexOf(parent) > -1;
88
96
  }
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi92aWV3X21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFakMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBd0JqRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsR0FBNEI7SUFDM0QsTUFBTSxDQUFvQjtJQUMxQixNQUFNLENBQXNCO0lBQzVCLE9BQU8sQ0FBc0I7SUFFN0I7O09BRUc7SUFDSCxZQUFZLEdBQWdCO1FBQzFCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25HLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxD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
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi92aWV3X21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFakMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBaUJqRCxNQUFNLE9BQWdCLGNBQWM7SUFDbEMsR0FBRyxDQUFVO0lBQ2IsR0FBRyxDQUFjO0lBQ2pCLFlBQVksR0FBWTtRQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNyQixDQUFDO0NBSUY7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsR0FBa0M7SUFDakUsTUFBTSxDQUFvQjtJQUMxQixNQUFNLENBQXNCO0lBQzVCLE9BQU8sQ0FBc0I7SUFFN0I7O09BRUc7SUFDSCxZQUFZLEdBQWdCO1FBQzFCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQW9DLENBQUM7UUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9B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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/view",
3
- "version": "4.0.0-beta.27",
3
+ "version": "4.0.0-beta.29",
4
4
  "description": "Base view plugin for egg",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -51,14 +51,15 @@
51
51
  "utility": "^2.5.0"
52
52
  },
53
53
  "peerDependencies": {
54
- "egg": "4.1.0-beta.27"
54
+ "egg": "4.1.0-beta.29"
55
55
  },
56
56
  "devDependencies": {
57
- "tsdown": "^0.15.4",
57
+ "tsdown": "0.15.6",
58
58
  "typescript": "^5.9.3",
59
- "vitest": "4.0.0-beta.16",
60
- "@eggjs/mock": "7.0.0-beta.27",
61
- "@eggjs/tsconfig": "3.1.0-beta.27"
59
+ "vitest": "4.0.0-beta.18",
60
+ "@eggjs/tsconfig": "3.1.0-beta.29",
61
+ "@eggjs/mock": "7.0.0-beta.29",
62
+ "egg": "4.1.0-beta.29"
62
63
  },
63
64
  "scripts": {
64
65
  "lint": "oxlint --type-aware",