@tsed/platform-views 8.11.0 → 8.11.2-rc.1

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.
@@ -3,4 +3,3 @@ import { View as W } from "@tsed/schema";
3
3
  * @deprecated Use View from @tsed/schema package.
4
4
  */
5
5
  export const View = W;
6
- //# sourceMappingURL=view.js.map
@@ -40,4 +40,3 @@ export const PLATFORM_VIEWS_EXTENSIONS = {
40
40
  walrus: "walrus",
41
41
  whiskers: "whiskers"
42
42
  };
43
- //# sourceMappingURL=PlatformViewsSettings.js.map
package/lib/esm/index.js CHANGED
@@ -2,4 +2,3 @@ export * from "./decorators/view.js";
2
2
  export * from "./domain/PlatformViewsSettings.js";
3
3
  export * from "./services/PlatformViews.js";
4
4
  export { PlatformViews as default } from "./services/PlatformViews.js";
5
- //# sourceMappingURL=index.js.map
@@ -114,4 +114,3 @@ injectable(PlatformViews)
114
114
  exists: true
115
115
  }
116
116
  });
117
- //# sourceMappingURL=PlatformViews.js.map
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@tsed/platform-views",
3
3
  "description": "Views module for Ts.ED Framework",
4
4
  "type": "module",
5
- "version": "8.11.0",
5
+ "version": "8.11.2-rc.1",
6
6
  "source": "./src/index.ts",
7
7
  "main": "./lib/esm/index.js",
8
8
  "module": "./lib/esm/index.js",
@@ -22,18 +22,18 @@
22
22
  "test:ci": "vitest run --coverage.thresholds.autoUpdate=true"
23
23
  },
24
24
  "dependencies": {
25
- "@tsed/engines": "8.11.0",
25
+ "@tsed/engines": "8.11.2-rc.1",
26
26
  "ejs": "^3.1.10",
27
27
  "tslib": "2.7.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@tsed/barrels": "8.11.0",
31
- "@tsed/core": "8.11.0",
32
- "@tsed/di": "8.11.0",
33
- "@tsed/engines": "8.11.0",
34
- "@tsed/exceptions": "8.11.0",
35
- "@tsed/schema": "8.11.0",
36
- "@tsed/typescript": "8.11.0",
30
+ "@tsed/barrels": "8.11.2-rc.1",
31
+ "@tsed/core": "8.11.2-rc.1",
32
+ "@tsed/di": "8.11.2-rc.1",
33
+ "@tsed/engines": "8.11.2-rc.1",
34
+ "@tsed/exceptions": "8.11.2-rc.1",
35
+ "@tsed/schema": "8.11.2-rc.1",
36
+ "@tsed/typescript": "8.11.2-rc.1",
37
37
  "@types/ejs": "3.1.5",
38
38
  "eslint": "9.12.0",
39
39
  "typescript": "5.4.5",
@@ -66,5 +66,8 @@
66
66
  },
67
67
  "homepage": "https://github.com/tsedio/tsed/tree/production/packages/platform/platform-views",
68
68
  "author": "Romain Lenzotti",
69
- "license": "MIT"
69
+ "license": "MIT",
70
+ "publishConfig": {
71
+ "tag": "rc"
72
+ }
70
73
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/decorators/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,IAAI,CAAC,EAAC,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAa,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlatformViewsSettings.js","sourceRoot":"","sources":["../../../src/domain/PlatformViewsSettings.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,aAAa,EAAE,aAAa;IAC5B,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,YAAY;IACjB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACrB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAC,aAAa,IAAI,OAAO,EAAC,MAAM,6BAA6B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlatformViews.js","sourceRoot":"","sources":["../../../src/services/PlatformViews.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import {View as W} from "@tsed/schema";
2
-
3
- /**
4
- * @deprecated Use View from @tsed/schema package.
5
- */
6
- export const View: typeof W = W;
@@ -1,102 +0,0 @@
1
- import {Writable} from "node:stream";
2
-
3
- import {BaseContext} from "@tsed/di";
4
-
5
- export const PLATFORM_VIEWS_EXTENSIONS = {
6
- atpl: "atpl",
7
- bracket: "bracket",
8
- dot: "dot",
9
- dust: "dust",
10
- ect: "ect",
11
- ejs: "ejs",
12
- haml: "haml",
13
- "haml-coffee": "haml-coffee",
14
- hamlet: "hamlet",
15
- hbs: "handlebars",
16
- handlebars: "handlebars",
17
- hogan: "hogan",
18
- htmling: "htmling",
19
- jazz: "jazz",
20
- jqtpl: "jqtpl",
21
- just: "just",
22
- kernel: "kernel",
23
- liquid: "liquid",
24
- liquor: "liquor",
25
- lodash: "lodash",
26
- mote: "mote",
27
- mustache: "mustache",
28
- nunjucks: "nunjucks",
29
- plates: "plates",
30
- pug: "pug",
31
- qejs: "qejs",
32
- ractive: "ractive",
33
- razor: "razor",
34
- jsx: "react",
35
- slm: "slm",
36
- squirelly: "squirelly",
37
- swig: "swig",
38
- teacup: "teacup",
39
- templayed: "templayed",
40
- twig: "twig",
41
- underscore: "underscore",
42
- vash: "vash",
43
- velocityjs: "velocityjs",
44
- walrus: "walrus",
45
- whiskers: "whiskers"
46
- };
47
-
48
- export type PlatformViewsExtensionsTypes = Record<string, string>;
49
-
50
- export interface PlatformViewsEngineOptions extends Record<string, unknown> {
51
- requires?: any;
52
- }
53
-
54
- export interface PlatformRenderOptions extends Record<string, unknown> {
55
- $ctx: BaseContext;
56
- }
57
-
58
- export interface PlatformViewWritableStream {
59
- pipe(stream: Writable): void;
60
- }
61
-
62
- export interface PlatformViewEngine {
63
- options: PlatformViewsEngineOptions;
64
-
65
- render(path: string, options: PlatformRenderOptions): Promise<string | PlatformViewWritableStream>;
66
- }
67
-
68
- export interface PlatformViewsSettings {
69
- disabled?: boolean;
70
- /**
71
- * Views directory.
72
- */
73
- root?: string;
74
- /**
75
- * Enable cache. Ts.ED enable cache in PRODUCTION profile by default.
76
- */
77
- cache?: boolean;
78
- /**
79
- * Provide extensions mapping to match the expected engines.
80
- */
81
- extensions?: Partial<PlatformViewsExtensionsTypes>;
82
- /**
83
- * Default view engine extension.
84
- * Allow omitting extension when using View decorator or render method.
85
- */
86
- viewEngine?: string;
87
- /**
88
- * Options mapping for each engine.
89
- */
90
- options?: Record<string, PlatformViewsEngineOptions>;
91
- }
92
-
93
- declare global {
94
- namespace TsED {
95
- interface Configuration {
96
- /**
97
- * Object to configure Views engines with Consolidate. See more on [View engine](/docs/template-engine.md).
98
- */
99
- views: PlatformViewsSettings;
100
- }
101
- }
102
- }
package/src/index.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from "./decorators/view.js";
2
- export * from "./domain/PlatformViewsSettings.js";
3
- export * from "./services/PlatformViews.js";
4
- export {PlatformViews as default} from "./services/PlatformViews.js";
@@ -1,88 +0,0 @@
1
- import {Injectable} from "@tsed/di";
2
- import {requires} from "@tsed/engines";
3
- import {PlatformTest} from "@tsed/platform-http/testing";
4
-
5
- import {PlatformViews} from "./PlatformViews.js";
6
-
7
- @Injectable()
8
- class AlterOptions {
9
- $alterRenderOptions(options: any) {
10
- options.alter = "alter";
11
- return Promise.resolve(options);
12
- }
13
- }
14
-
15
- describe("PlatformViews", () => {
16
- beforeEach(() =>
17
- PlatformTest.create({
18
- views: {
19
- extensions: {
20
- ejs: "ejs"
21
- },
22
- viewEngine: "ejs",
23
- options: {
24
- ejs: {
25
- global: "global",
26
- requires: "requires"
27
- }
28
- }
29
- }
30
- })
31
- );
32
- afterEach(() => {
33
- requires.delete("ejs");
34
- });
35
- afterEach(() => PlatformTest.reset());
36
-
37
- describe("render()", () => {
38
- it("should render a template with given extension", async () => {
39
- const platformViews = PlatformTest.get<PlatformViews>(PlatformViews);
40
- const engine = platformViews.getEngine("ejs")!;
41
-
42
- vi.spyOn(engine, "render").mockResolvedValue("HTML");
43
-
44
- const result = await platformViews.render("views.ejs");
45
-
46
- expect(result).toEqual("HTML");
47
- expect(engine.render).toHaveBeenCalledWith("views.ejs", {
48
- cache: false,
49
- alter: "alter",
50
- global: "global",
51
- requires: "requires"
52
- });
53
- });
54
- it("should render a template without extension", async () => {
55
- const platformViews = PlatformTest.get<PlatformViews>(PlatformViews);
56
- const engine = platformViews.getEngine("ejs")!;
57
-
58
- vi.spyOn(engine, "render").mockResolvedValue("HTML");
59
-
60
- const result = await platformViews.render("views", {test: "test"});
61
-
62
- expect(result).toEqual("HTML");
63
- expect(engine.render).toHaveBeenCalledWith("views.ejs", {
64
- cache: false,
65
- global: "global",
66
- test: "test",
67
- alter: "alter",
68
- requires: "requires"
69
- });
70
- });
71
- it("should render a template without extension and catch error", async () => {
72
- const platformViews = PlatformTest.get<PlatformViews>(PlatformViews);
73
- const engine = platformViews.getEngine("ejs")!;
74
-
75
- vi.spyOn(engine, "render").mockResolvedValue("HTML");
76
-
77
- let error: any;
78
-
79
- try {
80
- await platformViews.render("views.toto", {test: "test"});
81
- } catch (er) {
82
- error = er;
83
- }
84
-
85
- expect(error.message).toEqual('Engine not found to render the following "views.toto"');
86
- });
87
- });
88
- });
@@ -1,152 +0,0 @@
1
- import "../domain/PlatformViewsSettings.js";
2
-
3
- import Fs from "node:fs";
4
- import {extname, join, resolve} from "node:path";
5
-
6
- import {Env, getValue} from "@tsed/core";
7
- import {constant, injectable, ProviderType} from "@tsed/di";
8
- import {engines, getEngine, requires} from "@tsed/engines";
9
- import {$asyncAlter} from "@tsed/hooks";
10
-
11
- import {
12
- PLATFORM_VIEWS_EXTENSIONS,
13
- PlatformViewEngine,
14
- PlatformViewsEngineOptions,
15
- PlatformViewsExtensionsTypes,
16
- PlatformViewWritableStream
17
- } from "../domain/PlatformViewsSettings.js";
18
-
19
- async function patchEJS(ejs: any) {
20
- if (!ejs) {
21
- const mod = await import("ejs");
22
- ejs = mod.default;
23
- }
24
-
25
- return {
26
- compile(str: string, {client, ...options}: any) {
27
- return ejs.compile(str, options);
28
- }
29
- };
30
- }
31
-
32
- /**
33
- * @platform
34
- */
35
- export class PlatformViews {
36
- readonly root = constant("views.root", `${process.cwd()}/views`);
37
- readonly cache = constant<boolean>("views.cache");
38
- readonly disabled = constant<string | boolean>("views.disabled", false);
39
- readonly viewEngine = constant<string>("views.viewEngine", "ejs");
40
- protected env = constant<Env>("env");
41
- protected extensionsOptions = constant<PlatformViewsExtensionsTypes>("views.extensions", {});
42
- protected engineOptions = constant<Record<string, PlatformViewsEngineOptions>>("views.options", {});
43
-
44
- #extensions: Map<string, string>;
45
- #engines = new Map<string, PlatformViewEngine>();
46
- #cachePaths = new Map<string, {path: string; extension: string}>();
47
-
48
- async $onInit() {
49
- if (!this.disabled) {
50
- this.#extensions = new Map(
51
- Object.entries({
52
- ...PLATFORM_VIEWS_EXTENSIONS,
53
- ...this.extensionsOptions
54
- })
55
- );
56
-
57
- await this.loadEngines();
58
- }
59
- }
60
-
61
- async loadEngines() {
62
- requires.set("ejs", await patchEJS(requires.get("ejs")));
63
-
64
- this.#extensions.forEach((engineType) => {
65
- if (engines.has(engineType)) {
66
- const options = this.getEngineOptions(engineType);
67
-
68
- if (options.requires) {
69
- requires.set(engineType, options.requires);
70
- }
71
-
72
- this.registerEngine(engineType, {
73
- options,
74
- render: getEngine(engineType)
75
- });
76
- }
77
- });
78
- }
79
-
80
- getEngines() {
81
- return [...this.#extensions.entries()].map(([extension, engineType]) => {
82
- const engine = this.getEngine(this.getExtension(engineType))!;
83
-
84
- return {
85
- extension,
86
- engine
87
- };
88
- });
89
- }
90
-
91
- registerEngine(engineType: string, engine: PlatformViewEngine) {
92
- this.#engines.set(engineType, engine);
93
-
94
- return this;
95
- }
96
-
97
- getEngine(type: string) {
98
- return this.#engines.get(this.#extensions.get(type) || type);
99
- }
100
-
101
- getEngineOptions(engineType: string): PlatformViewsEngineOptions {
102
- return getValue(this.engineOptions, engineType, {});
103
- }
104
-
105
- async render(viewPath: string, options: any = {}): Promise<string | PlatformViewWritableStream> {
106
- const {$ctx} = options;
107
-
108
- options = await $asyncAlter("$alterRenderOptions", options, $ctx);
109
-
110
- const {path, extension} = this.#cachePaths.get(viewPath) || this.#cachePaths.set(viewPath, this.resolve(viewPath)).get(viewPath)!;
111
- const engine = this.getEngine(extension);
112
-
113
- if (!engine) {
114
- throw new Error(`Engine not found to render the following "${viewPath}"`);
115
- }
116
-
117
- const finalOpts = Object.assign({cache: this.cache || this.env === Env.PROD}, engine.options, options, {$ctx});
118
-
119
- return engine.render(path, finalOpts);
120
- }
121
-
122
- protected getExtension(viewPath: string) {
123
- return (extname(viewPath) || this.viewEngine).replace(/\./, "");
124
- }
125
-
126
- protected resolve(viewPath: string) {
127
- const extension = this.getExtension(viewPath);
128
-
129
- viewPath = viewPath.replace(extname(viewPath), "") + "." + extension;
130
-
131
- const path =
132
- [
133
- viewPath,
134
- resolve(join(this.root, viewPath)),
135
- resolve(join(process.cwd(), "views", viewPath)),
136
- resolve(join(process.cwd(), "public", viewPath))
137
- ].find((file) => Fs.existsSync(file)) || viewPath;
138
-
139
- return {
140
- path,
141
- extension
142
- };
143
- }
144
- }
145
-
146
- injectable(PlatformViews)
147
- .type(ProviderType.MODULE)
148
- .configuration({
149
- views: {
150
- exists: true
151
- }
152
- } as never);
package/vitest.config.mts DELETED
@@ -1,25 +0,0 @@
1
- // @ts-ignore
2
- import {presets} from "@tsed/vitest/presets";
3
- import {defineConfig} from "vitest/config";
4
-
5
- export default defineConfig(
6
- {
7
- ...presets,
8
- test: {
9
- ...presets.test,
10
- coverage: {
11
- ...presets.test.coverage,
12
- exclude:[
13
- ...presets.test.coverage.exclude,
14
- "src/decorators/view.ts",
15
- ],
16
- thresholds: {
17
- statements: 0,
18
- branches: 0,
19
- functions: 0,
20
- lines: 0
21
- }
22
- }
23
- }
24
- }
25
- );