@eggjs/view-nunjucks 3.0.0-beta.35 → 3.0.0-beta.36
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/dist/app/extend/application.d.ts +12 -8
- package/dist/app/extend/application.js +17 -15
- package/dist/app.d.ts +10 -6
- package/dist/app.js +17 -13
- package/dist/config/config.default.d.ts +35 -33
- package/dist/config/config.default.js +11 -10
- package/dist/config/config.local.d.ts +6 -3
- package/dist/config/config.local.js +5 -6
- package/dist/index.d.ts +12 -9
- package/dist/index.js +16 -13
- package/dist/lib/engine.d.ts +12 -7
- package/dist/lib/engine.js +17 -13
- package/dist/lib/environment.d.ts +22 -17
- package/dist/lib/environment.js +60 -73
- package/dist/lib/file_loader.d.ts +22 -17
- package/dist/lib/file_loader.js +34 -36
- package/dist/lib/helper.d.ts +11 -8
- package/dist/lib/helper.js +63 -65
- package/dist/lib/view.d.ts +29 -24
- package/dist/lib/view.js +50 -55
- package/dist/types.d.ts +19 -17
- package/dist/types.js +1 -2
- package/package.json +33 -40
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { NunjucksEnvironment } from "../../lib/environment.js";
|
|
2
|
+
import { Application } from "egg";
|
|
3
|
+
|
|
4
|
+
//#region src/app/extend/application.d.ts
|
|
5
|
+
declare class NunjucksApplication extends Application {
|
|
6
|
+
/**
|
|
7
|
+
* nunjucks environment
|
|
8
|
+
* @see https://mozilla.github.io/nunjucks/api.html#environment
|
|
9
|
+
*/
|
|
10
|
+
get nunjucks(): NunjucksEnvironment;
|
|
9
11
|
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { NunjucksApplication as default };
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { Application } from 'egg';
|
|
2
1
|
import { createEngine } from "../../lib/engine.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
2
|
+
import { Application } from "egg";
|
|
3
|
+
|
|
4
|
+
//#region src/app/extend/application.ts
|
|
5
|
+
const NUNJUCKS = Symbol("app#nunjucks");
|
|
6
|
+
var NunjucksApplication = class extends Application {
|
|
7
|
+
/**
|
|
8
|
+
* nunjucks environment
|
|
9
|
+
* @see https://mozilla.github.io/nunjucks/api.html#environment
|
|
10
|
+
*/
|
|
11
|
+
get nunjucks() {
|
|
12
|
+
if (!this[NUNJUCKS]) this[NUNJUCKS] = createEngine(this);
|
|
13
|
+
return this[NUNJUCKS];
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { NunjucksApplication as default };
|
package/dist/app.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { Application, ILifecycleBoot } from "egg";
|
|
2
|
+
|
|
3
|
+
//#region src/app.d.ts
|
|
4
|
+
declare class ViewNunjucksAppBoot implements ILifecycleBoot {
|
|
5
|
+
app: Application;
|
|
6
|
+
constructor(app: Application);
|
|
7
|
+
configDidLoad(): void;
|
|
8
|
+
didLoad(): Promise<void>;
|
|
7
9
|
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { ViewNunjucksAppBoot as default };
|
package/dist/app.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { NunjucksView } from "./lib/view.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
|
|
3
|
+
//#region src/app.ts
|
|
4
|
+
var ViewNunjucksAppBoot = class {
|
|
5
|
+
app;
|
|
6
|
+
constructor(app) {
|
|
7
|
+
this.app = app;
|
|
8
|
+
}
|
|
9
|
+
configDidLoad() {
|
|
10
|
+
this.app.view.use("nunjucks", NunjucksView);
|
|
11
|
+
}
|
|
12
|
+
async didLoad() {
|
|
13
|
+
await this.app.nunjucks.ready();
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { ViewNunjucksAppBoot as default };
|
|
@@ -1,36 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
1
|
+
//#region src/config/config.default.d.ts
|
|
2
|
+
interface NunjucksConfig {
|
|
3
|
+
/**
|
|
4
|
+
* Controls if output with dangerous characters are escaped automatically
|
|
5
|
+
* @default true
|
|
6
|
+
*/
|
|
7
|
+
autoescape: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Throw errors when outputting a null/undefined value
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
12
|
+
throwOnUndefined: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Automatically remove trailing newlines from a block/tag
|
|
15
|
+
* @default false
|
|
16
|
+
*/
|
|
17
|
+
trimBlocks: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Automatically remove leading whitespace from a block/tag
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
lstripBlocks: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Use a cache and recompile templates each time. false in local env.
|
|
25
|
+
* @default true
|
|
26
|
+
*/
|
|
27
|
+
cache: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Internal property set by engine, do not set directly
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
noCache?: boolean;
|
|
32
33
|
}
|
|
33
34
|
declare const _default: {
|
|
34
|
-
|
|
35
|
+
nunjucks: NunjucksConfig;
|
|
35
36
|
};
|
|
36
|
-
|
|
37
|
+
//#endregion
|
|
38
|
+
export { NunjucksConfig, _default as default };
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
//#
|
|
1
|
+
//#region src/config/config.default.ts
|
|
2
|
+
var config_default_default = { nunjucks: {
|
|
3
|
+
autoescape: true,
|
|
4
|
+
throwOnUndefined: false,
|
|
5
|
+
trimBlocks: false,
|
|
6
|
+
lstripBlocks: false,
|
|
7
|
+
cache: true
|
|
8
|
+
} };
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { config_default_default as default };
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { NunjucksConfig } from "./config.default.js";
|
|
2
|
+
|
|
3
|
+
//#region src/config/config.local.d.ts
|
|
2
4
|
declare const _default: {
|
|
3
|
-
|
|
5
|
+
nunjucks: Partial<NunjucksConfig>;
|
|
4
6
|
};
|
|
5
|
-
|
|
7
|
+
//#endregion
|
|
8
|
+
export { _default as default };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmxvY2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWcubG9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZUFBZTtJQUNiLFFBQVEsRUFBRTtRQUNSLEtBQUssRUFBRSxLQUFLO0tBQ2M7Q0FDN0IsQ0FBQyJ9
|
|
1
|
+
//#region src/config/config.local.ts
|
|
2
|
+
var config_local_default = { nunjucks: { cache: false } };
|
|
3
|
+
|
|
4
|
+
//#endregion
|
|
5
|
+
export { config_local_default as default };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { createHelper } from "./lib/helper.js";
|
|
2
|
+
import { NunjucksEnvironment } from "./lib/environment.js";
|
|
3
|
+
import { NunjucksConfig } from "./config/config.default.js";
|
|
4
|
+
import "./types.js";
|
|
5
|
+
import { NunjucksFileLoader } from "./lib/file_loader.js";
|
|
6
|
+
import { NunjucksView } from "./lib/view.js";
|
|
7
|
+
import { createEngine } from "./lib/engine.js";
|
|
8
|
+
import { EggPluginFactory } from "egg";
|
|
9
|
+
|
|
10
|
+
//#region src/index.d.ts
|
|
3
11
|
declare const _default: EggPluginFactory;
|
|
4
|
-
|
|
5
|
-
export { NunjucksEnvironment
|
|
6
|
-
export { NunjucksFileLoader } from './lib/file_loader.ts';
|
|
7
|
-
export { createHelper } from './lib/helper.ts';
|
|
8
|
-
export { NunjucksView } from './lib/view.ts';
|
|
9
|
-
export { createEngine } from './lib/engine.ts';
|
|
10
|
-
export type { NunjucksConfig } from './config/config.default.ts';
|
|
12
|
+
//#endregion
|
|
13
|
+
export { type NunjucksConfig, NunjucksEnvironment, NunjucksFileLoader, NunjucksView, createEngine, createHelper, _default as default };
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { NunjucksView } from "./lib/view.js";
|
|
2
|
+
import { NunjucksFileLoader } from "./lib/file_loader.js";
|
|
3
|
+
import { createHelper } from "./lib/helper.js";
|
|
4
|
+
import { NunjucksEnvironment } from "./lib/environment.js";
|
|
5
|
+
import { createEngine } from "./lib/engine.js";
|
|
6
|
+
import { definePluginFactory } from "egg";
|
|
7
|
+
|
|
8
|
+
//#region src/index.ts
|
|
9
|
+
var src_default = definePluginFactory({
|
|
10
|
+
name: "nunjucks",
|
|
11
|
+
enable: true,
|
|
12
|
+
path: import.meta.dirname,
|
|
13
|
+
dependencies: ["security", "view"]
|
|
8
14
|
});
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export { createHelper
|
|
12
|
-
export { NunjucksView } from "./lib/view.js";
|
|
13
|
-
export { createEngine } from "./lib/engine.js";
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLG1CQUFtQixFQUF5QixNQUFNLEtBQUssQ0FBQztBQUVqRSxlQUFlLG1CQUFtQixDQUFDO0lBQ2pDLElBQUksRUFBRSxVQUFVO0lBQ2hCLE1BQU0sRUFBRSxJQUFJO0lBQ1osSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTztJQUN6QixZQUFZLEVBQUUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDO0NBQ25DLENBQXFCLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDIn0=
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { NunjucksEnvironment, NunjucksFileLoader, NunjucksView, createEngine, createHelper, src_default as default };
|
package/dist/lib/engine.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { NunjucksEnvironment } from "./environment.js";
|
|
2
|
+
import { Application } from "egg";
|
|
3
|
+
|
|
4
|
+
//#region src/lib/engine.d.ts
|
|
5
|
+
|
|
3
6
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
* Create nunjucks environment
|
|
8
|
+
* @param app - application instance
|
|
9
|
+
* @returns nunjucks environment instance
|
|
10
|
+
*/
|
|
11
|
+
declare function createEngine(app: Application): NunjucksEnvironment;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { createEngine };
|
package/dist/lib/engine.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { NunjucksEnvironment } from "./environment.js";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/engine.ts
|
|
2
4
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
* Create nunjucks environment
|
|
6
|
+
* @param app - application instance
|
|
7
|
+
* @returns nunjucks environment instance
|
|
8
|
+
*/
|
|
9
|
+
function createEngine(app) {
|
|
10
|
+
const coreLogger = app.loggers.coreLogger;
|
|
11
|
+
const viewPaths = app.config.view.root;
|
|
12
|
+
coreLogger.info("[@eggjs/view-nunjucks] loading templates from %j", viewPaths);
|
|
13
|
+
const config = app.config.nunjucks;
|
|
14
|
+
config.noCache = !config.cache;
|
|
15
|
+
delete config.cache;
|
|
16
|
+
return new NunjucksEnvironment(app);
|
|
15
17
|
}
|
|
16
|
-
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { createEngine };
|
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { createHelper } from "./helper.js";
|
|
2
|
+
import { Application } from "egg";
|
|
3
|
+
import nunjucks from "nunjucks";
|
|
4
|
+
|
|
5
|
+
//#region src/lib/environment.d.ts
|
|
6
|
+
|
|
4
7
|
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
* Extend nunjucks environment, see {@link https://mozilla.github.io/nunjucks/api.html#environment}
|
|
9
|
+
*/
|
|
10
|
+
declare class NunjucksEnvironment extends nunjucks.Environment {
|
|
11
|
+
app: Application;
|
|
12
|
+
ViewHelper: ReturnType<typeof createHelper>;
|
|
13
|
+
constructor(app: Application);
|
|
14
|
+
/**
|
|
15
|
+
* clean template cache
|
|
16
|
+
* @param name - full path
|
|
17
|
+
* @return clean count
|
|
18
|
+
*/
|
|
19
|
+
cleanCache(name?: string): number;
|
|
20
|
+
ready(): Promise<void>;
|
|
21
|
+
private loadFilter;
|
|
19
22
|
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { NunjucksEnvironment };
|
package/dist/lib/environment.js
CHANGED
|
@@ -1,76 +1,63 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import nunjucks from 'nunjucks';
|
|
3
1
|
import { NunjucksFileLoader } from "./file_loader.js";
|
|
4
2
|
import { createHelper } from "./helper.js";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import nunjucks from "nunjucks";
|
|
5
|
+
|
|
6
|
+
//#region src/lib/environment.ts
|
|
5
7
|
/**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const filterPath = this.app.loader.resolveModule(path.join(unit.path, 'app/extend/filter'));
|
|
63
|
-
if (!filterPath)
|
|
64
|
-
continue;
|
|
65
|
-
const filters = await this.app.loader.loadFile(filterPath);
|
|
66
|
-
if (!filters)
|
|
67
|
-
continue;
|
|
68
|
-
const filterKeys = Object.keys(filters);
|
|
69
|
-
for (const key of filterKeys) {
|
|
70
|
-
this.addFilter(key, filters[key]);
|
|
71
|
-
}
|
|
72
|
-
this.app.coreLogger.info('[@eggjs/view-nunjucks] load filter %j from %s', filterKeys, filterPath);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUc3QixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxRQUFRLENBQUMsV0FBVztJQUMzRCxHQUFHLENBQWM7SUFDakIsVUFBVSxDQUFrQztJQUU1QyxZQUFZLEdBQWdCO1FBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsS0FBSyxDQUFDLFVBQWlCLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUVmLDZHQUE2RztRQUM1RyxRQUFRLENBQUMsR0FBVyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFFM0QsMEZBQTBGO1FBQzFGLHdEQUF3RDtRQUN4RCxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ3pELHdEQUF3RDtRQUN4RCxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxVQUFVLEdBQUcsSUFBVztZQUN0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsS0FBSyxhQUFhO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzlELE9BQU8sa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUM7UUFFRixtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxJQUFhO1FBQ3RCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLE1BQU0sT0FBTyxHQUFJLElBQVksQ0FBQyxPQUFPLENBQUM7UUFDdEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULGdDQUFnQztnQkFDaEMsMEJBQTBCO2dCQUMxQixJQUFLLE1BQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsS0FBSyxFQUFFLENBQUM7b0JBQ1AsTUFBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxNQUFNLFNBQVMsSUFBSyxNQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzlDLEtBQUssRUFBRSxDQUFDO29CQUNQLE1BQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUMxQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxzRUFBc0U7SUFDOUQsS0FBSyxDQUFDLFVBQVU7UUFDdEIsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxVQUFVO2dCQUFFLFNBQVM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLE9BQU87Z0JBQUUsU0FBUztZQUN2QixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsK0NBQStDLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
8
|
+
* Extend nunjucks environment, see {@link https://mozilla.github.io/nunjucks/api.html#environment}
|
|
9
|
+
*/
|
|
10
|
+
var NunjucksEnvironment = class extends nunjucks.Environment {
|
|
11
|
+
app;
|
|
12
|
+
ViewHelper;
|
|
13
|
+
constructor(app) {
|
|
14
|
+
const fileLoader = new NunjucksFileLoader(app);
|
|
15
|
+
super(fileLoader, app.config.nunjucks);
|
|
16
|
+
this.app = app;
|
|
17
|
+
nunjucks.lib.escape = app.Helper.prototype.escape;
|
|
18
|
+
const originMemberLookup = nunjucks.runtime.memberLookup;
|
|
19
|
+
nunjucks.runtime.memberLookup = function(...args) {
|
|
20
|
+
const val = args[1];
|
|
21
|
+
if (val === "prototype" || val === "constructor") return null;
|
|
22
|
+
return originMemberLookup(...args);
|
|
23
|
+
};
|
|
24
|
+
this.ViewHelper = createHelper(app, this.filters);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* clean template cache
|
|
28
|
+
* @param name - full path
|
|
29
|
+
* @return clean count
|
|
30
|
+
*/
|
|
31
|
+
cleanCache(name) {
|
|
32
|
+
let count = 0;
|
|
33
|
+
const loaders = this.loaders;
|
|
34
|
+
for (const loader of loaders) if (name) {
|
|
35
|
+
/* istanbul ignore else */
|
|
36
|
+
if (loader.cache[name]) {
|
|
37
|
+
count++;
|
|
38
|
+
loader.cache[name] = null;
|
|
39
|
+
}
|
|
40
|
+
} else for (const cacheName in loader.cache) {
|
|
41
|
+
count++;
|
|
42
|
+
loader.cache[cacheName] = null;
|
|
43
|
+
}
|
|
44
|
+
return count;
|
|
45
|
+
}
|
|
46
|
+
async ready() {
|
|
47
|
+
await this.loadFilter();
|
|
48
|
+
}
|
|
49
|
+
async loadFilter() {
|
|
50
|
+
for (const unit of this.app.loader.getLoadUnits()) {
|
|
51
|
+
const filterPath = this.app.loader.resolveModule(path.join(unit.path, "app/extend/filter"));
|
|
52
|
+
if (!filterPath) continue;
|
|
53
|
+
const filters = await this.app.loader.loadFile(filterPath);
|
|
54
|
+
if (!filters) continue;
|
|
55
|
+
const filterKeys = Object.keys(filters);
|
|
56
|
+
for (const key of filterKeys) this.addFilter(key, filters[key]);
|
|
57
|
+
this.app.coreLogger.info("[@eggjs/view-nunjucks] load filter %j from %s", filterKeys, filterPath);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
//#endregion
|
|
63
|
+
export { NunjucksEnvironment };
|
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { FileSystemLoader } from
|
|
1
|
+
import { Application } from "egg";
|
|
2
|
+
import { FileSystemLoader } from "nunjucks";
|
|
3
|
+
|
|
4
|
+
//#region src/lib/file_loader.d.ts
|
|
5
|
+
|
|
3
6
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
* Extended nunjucks FileSystemLoader, will auto inject csrf && nonce
|
|
8
|
+
*/
|
|
9
|
+
declare class NunjucksFileLoader extends FileSystemLoader {
|
|
10
|
+
private app;
|
|
11
|
+
/**
|
|
12
|
+
* @param app - application instance
|
|
13
|
+
*/
|
|
14
|
+
constructor(app: Application);
|
|
15
|
+
/**
|
|
16
|
+
* Override getSource {@link https://mozilla.github.io/nunjucks/api.html#writing-a-loader},
|
|
17
|
+
* inject csrfTag and nonce
|
|
18
|
+
* @param name - the name of the template
|
|
19
|
+
* @return html
|
|
20
|
+
*/
|
|
21
|
+
getSource(name: string): any;
|
|
19
22
|
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { NunjucksFileLoader };
|
package/dist/lib/file_loader.js
CHANGED
|
@@ -1,37 +1,35 @@
|
|
|
1
|
-
import { FileSystemLoader } from
|
|
1
|
+
import { FileSystemLoader } from "nunjucks";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/file_loader.ts
|
|
2
4
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return result;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2ZpbGVfbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUU1Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxnQkFBZ0I7SUFDOUMsR0FBRyxDQUFjO0lBRXpCOztPQUVHO0lBQ0gsWUFBWSxHQUFnQjtRQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ00sU0FBUyxDQUFDLElBQVk7UUFDN0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQywwQkFBMEI7UUFDMUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUN4QyxpR0FBaUc7WUFDakcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUNELGtHQUFrRztZQUNsRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiJ9
|
|
5
|
+
* Extended nunjucks FileSystemLoader, will auto inject csrf && nonce
|
|
6
|
+
*/
|
|
7
|
+
var NunjucksFileLoader = class extends FileSystemLoader {
|
|
8
|
+
app;
|
|
9
|
+
/**
|
|
10
|
+
* @param app - application instance
|
|
11
|
+
*/
|
|
12
|
+
constructor(app) {
|
|
13
|
+
super(app.config.view.root, { noCache: app.config.nunjucks.noCache });
|
|
14
|
+
this.app = app;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Override getSource {@link https://mozilla.github.io/nunjucks/api.html#writing-a-loader},
|
|
18
|
+
* inject csrfTag and nonce
|
|
19
|
+
* @param name - the name of the template
|
|
20
|
+
* @return html
|
|
21
|
+
*/
|
|
22
|
+
getSource(name) {
|
|
23
|
+
const result = super.getSource(name);
|
|
24
|
+
/* istanbul ignore else */
|
|
25
|
+
if (result) {
|
|
26
|
+
const config = this.app.config.security;
|
|
27
|
+
if (!(config.csrf === false || config.csrf.enable === false)) result.src = this.app.injectCsrf(result.src);
|
|
28
|
+
if (!(config.csp === false || config.csp.enable === false)) result.src = this.app.injectNonce(result.src);
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
export { NunjucksFileLoader };
|
package/dist/lib/helper.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Application, Context } from "egg";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/helper.d.ts
|
|
2
4
|
type BuildInFilters = Record<string, any>;
|
|
3
5
|
type HelperClass = new (ctx: Context) => any;
|
|
4
6
|
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
* Create NunjucksViewHelper class
|
|
8
|
+
* @param app - application instance
|
|
9
|
+
* @param buildInFilters - nunjucks built-in filters
|
|
10
|
+
* @returns NunjucksViewHelper class
|
|
11
|
+
*/
|
|
12
|
+
declare function createHelper(app: Application, buildInFilters: BuildInFilters): HelperClass;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { createHelper };
|
package/dist/lib/helper.js
CHANGED
|
@@ -1,67 +1,65 @@
|
|
|
1
|
+
//#region src/lib/helper.ts
|
|
1
2
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (NunjucksViewHelper.prototype[key] == null) {
|
|
62
|
-
NunjucksViewHelper.prototype[key] = buildInFilters[key];
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return NunjucksViewHelper;
|
|
3
|
+
* Create NunjucksViewHelper class
|
|
4
|
+
* @param app - application instance
|
|
5
|
+
* @param buildInFilters - nunjucks built-in filters
|
|
6
|
+
* @returns NunjucksViewHelper class
|
|
7
|
+
*/
|
|
8
|
+
function createHelper(app, buildInFilters) {
|
|
9
|
+
/**
|
|
10
|
+
* NunjucksViewHelper extends {@link Helper} for nunjucks templates.
|
|
11
|
+
* Wrap some helpers for safe string, and transform build-in filters to helpers
|
|
12
|
+
*/
|
|
13
|
+
class NunjucksViewHelper extends app.Helper {
|
|
14
|
+
constructor(ctx) {
|
|
15
|
+
super(ctx);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* See {@link Helper#shtml}
|
|
19
|
+
* @param str - the string that will be transformed to safe html
|
|
20
|
+
* @return the result
|
|
21
|
+
*/
|
|
22
|
+
shtml(str) {
|
|
23
|
+
return this.safe(super.shtml(str));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* See {@link Helper#surl}
|
|
27
|
+
* @param str - the string that will be transformed to safe url
|
|
28
|
+
* @return the result
|
|
29
|
+
*/
|
|
30
|
+
surl(str) {
|
|
31
|
+
return this.safe(super.surl(str));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* See {@link Helper#sjs}
|
|
35
|
+
* @param str - the string that will be transformed to safe js
|
|
36
|
+
* @return the result
|
|
37
|
+
*/
|
|
38
|
+
sjs(str) {
|
|
39
|
+
return this.safe(super.sjs(str));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* don't use `super.helper.escape` directly due to `SafeString` checking
|
|
43
|
+
* see https://github.com/mozilla/nunjucks/blob/master/src/filters.js#L119
|
|
44
|
+
* buildInFilters.escape is `nunjucks.filters.escape` which will call `nunjucks.lib.escape`
|
|
45
|
+
* and `nunjucks.lib.escape` is overrided by `app.Helper.escape` for better performance
|
|
46
|
+
* @param str - the string that will be escaped
|
|
47
|
+
* @return the result
|
|
48
|
+
*/
|
|
49
|
+
escape(str) {
|
|
50
|
+
return buildInFilters.escape(str);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* get hidden filed for `csrf`
|
|
54
|
+
* @return html string
|
|
55
|
+
*/
|
|
56
|
+
csrfTag() {
|
|
57
|
+
return this.safe(`<input type="hidden" name="_csrf" value="${this.ctx.csrf}" />`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
for (const key in buildInFilters) if (NunjucksViewHelper.prototype[key] == null) NunjucksViewHelper.prototype[key] = buildInFilters[key];
|
|
61
|
+
return NunjucksViewHelper;
|
|
66
62
|
}
|
|
67
|
-
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
65
|
+
export { createHelper };
|
package/dist/lib/view.d.ts
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import { createHelper } from "./helper.js";
|
|
2
|
+
import "../types.js";
|
|
3
|
+
import { ViewEngineBase } from "@eggjs/view";
|
|
4
|
+
import { Context } from "egg";
|
|
5
|
+
|
|
6
|
+
//#region src/lib/view.d.ts
|
|
7
|
+
|
|
5
8
|
/**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
9
|
+
* Nunjucks view class for rendering templates
|
|
10
|
+
*/
|
|
11
|
+
declare class NunjucksView extends ViewEngineBase {
|
|
12
|
+
viewHelper: InstanceType<ReturnType<typeof createHelper>>;
|
|
13
|
+
constructor(ctx: Context);
|
|
14
|
+
/**
|
|
15
|
+
* Render a template file
|
|
16
|
+
* @param name - template name
|
|
17
|
+
* @param locals - template locals
|
|
18
|
+
* @returns rendered html string
|
|
19
|
+
*/
|
|
20
|
+
render(name: string, locals: Record<string, any>): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Render a template string
|
|
23
|
+
* @param tpl - template string
|
|
24
|
+
* @param locals - template locals
|
|
25
|
+
* @param opts - render options
|
|
26
|
+
* @returns rendered html string
|
|
27
|
+
*/
|
|
28
|
+
renderString(tpl: string, locals: Record<string, any>, opts?: any): Promise<string>;
|
|
26
29
|
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { NunjucksView };
|
package/dist/lib/view.js
CHANGED
|
@@ -1,56 +1,51 @@
|
|
|
1
|
-
import "
|
|
2
|
-
|
|
1
|
+
import { ViewEngineBase } from "@eggjs/view";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/view.ts
|
|
3
4
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSzdDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxjQUFjO0lBQzlDLFVBQVUsQ0FBZ0Q7SUFFMUQsWUFBWSxHQUFZO1FBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFZLEVBQUUsTUFBMkI7UUFDcEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFpQixFQUFFLE1BQXFCLEVBQUUsRUFBRTtnQkFDbEYsSUFBSSxHQUFHO29CQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixPQUFPLENBQUMsTUFBTyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQVcsRUFBRSxNQUEyQixFQUFFLElBQVU7UUFDckUsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxnREFBZ0Q7Z0JBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQWlCLEVBQUUsTUFBcUIsRUFBRSxFQUFFO29CQUM3RixJQUFJLEdBQUc7d0JBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLE9BQU8sQ0FBQyxNQUFPLENBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFpQixFQUFFLE1BQXFCLEVBQUUsRUFBRTtvQkFDdkYsSUFBSSxHQUFHO3dCQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1QixPQUFPLENBQUMsTUFBTyxDQUFDLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
|
|
5
|
+
* Nunjucks view class for rendering templates
|
|
6
|
+
*/
|
|
7
|
+
var NunjucksView = class extends ViewEngineBase {
|
|
8
|
+
viewHelper;
|
|
9
|
+
constructor(ctx) {
|
|
10
|
+
super(ctx);
|
|
11
|
+
this.viewHelper = new this.app.nunjucks.ViewHelper(ctx);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Render a template file
|
|
15
|
+
* @param name - template name
|
|
16
|
+
* @param locals - template locals
|
|
17
|
+
* @returns rendered html string
|
|
18
|
+
*/
|
|
19
|
+
async render(name, locals) {
|
|
20
|
+
locals.helper = this.viewHelper;
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
this.app.nunjucks.render(name, locals, (err, result) => {
|
|
23
|
+
if (err) return reject(err);
|
|
24
|
+
resolve(result);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Render a template string
|
|
30
|
+
* @param tpl - template string
|
|
31
|
+
* @param locals - template locals
|
|
32
|
+
* @param opts - render options
|
|
33
|
+
* @returns rendered html string
|
|
34
|
+
*/
|
|
35
|
+
async renderString(tpl, locals, opts) {
|
|
36
|
+
locals.helper = this.viewHelper;
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
if (opts) this.app.nunjucks.renderString(tpl, locals, opts, (err, result) => {
|
|
39
|
+
if (err) return reject(err);
|
|
40
|
+
resolve(result);
|
|
41
|
+
});
|
|
42
|
+
else this.app.nunjucks.renderString(tpl, locals, (err, result) => {
|
|
43
|
+
if (err) return reject(err);
|
|
44
|
+
resolve(result);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
//#endregion
|
|
51
|
+
export { NunjucksView };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
import { NunjucksEnvironment } from "./lib/environment.js";
|
|
2
|
+
import { NunjucksConfig } from "./config/config.default.js";
|
|
3
|
+
|
|
4
|
+
//#region src/types.d.ts
|
|
5
|
+
declare module "egg" {
|
|
6
|
+
interface EggAppConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Nunjucks plugin configuration
|
|
9
|
+
*/
|
|
10
|
+
nunjucks: NunjucksConfig;
|
|
11
|
+
}
|
|
12
|
+
interface Application {
|
|
13
|
+
/**
|
|
14
|
+
* Nunjucks environment instance
|
|
15
|
+
* @see https://mozilla.github.io/nunjucks/api.html#environment
|
|
16
|
+
*/
|
|
17
|
+
get nunjucks(): NunjucksEnvironment;
|
|
18
|
+
}
|
|
19
|
+
}
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
1
|
+
export { };
|
package/package.json
CHANGED
|
@@ -1,8 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/view-nunjucks",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.36",
|
|
4
4
|
"description": "nunjucks view plugin for egg",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"egg",
|
|
7
|
+
"egg-plugin",
|
|
8
|
+
"egg-view",
|
|
9
|
+
"eggPlugin",
|
|
10
|
+
"nunjucks",
|
|
11
|
+
"template",
|
|
12
|
+
"view"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://github.com/eggjs/egg/tree/next/plugins/view-nunjucks#readme",
|
|
15
|
+
"bugs": "https://github.com/eggjs/egg/issues",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"author": "TZ <atian25@qq.com>",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/eggjs/egg.git",
|
|
21
|
+
"directory": "plugins/view-nunjucks"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist"
|
|
25
|
+
],
|
|
5
26
|
"type": "module",
|
|
27
|
+
"main": "./dist/index.js",
|
|
28
|
+
"module": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
6
30
|
"exports": {
|
|
7
31
|
".": "./dist/index.js",
|
|
8
32
|
"./app": "./dist/app.js",
|
|
@@ -20,25 +44,9 @@
|
|
|
20
44
|
"publishConfig": {
|
|
21
45
|
"access": "public"
|
|
22
46
|
},
|
|
23
|
-
"files": [
|
|
24
|
-
"dist"
|
|
25
|
-
],
|
|
26
|
-
"keywords": [
|
|
27
|
-
"egg",
|
|
28
|
-
"eggPlugin",
|
|
29
|
-
"egg-plugin",
|
|
30
|
-
"egg-view",
|
|
31
|
-
"nunjucks",
|
|
32
|
-
"view",
|
|
33
|
-
"template"
|
|
34
|
-
],
|
|
35
47
|
"dependencies": {
|
|
36
48
|
"nunjucks": "^3.2.4"
|
|
37
49
|
},
|
|
38
|
-
"peerDependencies": {
|
|
39
|
-
"@eggjs/view": "4.0.0-beta.35",
|
|
40
|
-
"egg": "4.1.0-beta.35"
|
|
41
|
-
},
|
|
42
50
|
"devDependencies": {
|
|
43
51
|
"@types/common-tags": "^1.8.4",
|
|
44
52
|
"@types/nunjucks": "^3.2.6",
|
|
@@ -46,34 +54,19 @@
|
|
|
46
54
|
"common-tags": "^1.8.2",
|
|
47
55
|
"marked": "^17.0.0",
|
|
48
56
|
"nunjucks-markdown": "^2.0.1",
|
|
49
|
-
"oxlint": "^1.31.0",
|
|
50
|
-
"rimraf": "^6.1.2",
|
|
51
|
-
"tsdown": "^0.17.0",
|
|
52
57
|
"typescript": "^5.9.3",
|
|
53
|
-
"
|
|
54
|
-
"@eggjs/
|
|
55
|
-
"
|
|
56
|
-
|
|
58
|
+
"@eggjs/mock": "7.0.0-beta.36",
|
|
59
|
+
"@eggjs/view": "4.0.0-beta.36",
|
|
60
|
+
"egg": "4.1.0-beta.36"
|
|
61
|
+
},
|
|
62
|
+
"peerDependencies": {
|
|
63
|
+
"@eggjs/view": "4.0.0-beta.36",
|
|
64
|
+
"egg": "4.1.0-beta.36"
|
|
57
65
|
},
|
|
58
66
|
"engines": {
|
|
59
67
|
"node": ">=22.18.0"
|
|
60
68
|
},
|
|
61
|
-
"repository": {
|
|
62
|
-
"type": "git",
|
|
63
|
-
"url": "git+https://github.com/eggjs/egg.git",
|
|
64
|
-
"directory": "plugins/view-nunjucks"
|
|
65
|
-
},
|
|
66
|
-
"bugs": "https://github.com/eggjs/egg/issues",
|
|
67
|
-
"homepage": "https://github.com/eggjs/egg/tree/next/plugins/view-nunjucks#readme",
|
|
68
|
-
"author": "TZ <atian25@qq.com>",
|
|
69
|
-
"license": "MIT",
|
|
70
|
-
"main": "./dist/index.js",
|
|
71
|
-
"module": "./dist/index.js",
|
|
72
|
-
"types": "./dist/index.d.ts",
|
|
73
69
|
"scripts": {
|
|
74
|
-
"
|
|
75
|
-
"typecheck": "tsc --noEmit",
|
|
76
|
-
"lint": "oxlint --type-aware",
|
|
77
|
-
"test": "vitest run"
|
|
70
|
+
"typecheck": "tsgo --noEmit"
|
|
78
71
|
}
|
|
79
72
|
}
|