@ackplus/nest-dynamic-templates 1.1.1 → 1.1.2
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/package.json +2 -2
- package/src/{index.ts → index.d.ts} +2 -14
- package/src/index.d.ts.map +1 -0
- package/src/lib/constant.d.ts +3 -0
- package/src/lib/constant.d.ts.map +1 -0
- package/src/lib/dto/create-template-layout.dto.d.ts +16 -0
- package/src/lib/dto/create-template-layout.dto.d.ts.map +1 -0
- package/src/lib/dto/create-template.dto.d.ts +18 -0
- package/src/lib/dto/create-template.dto.d.ts.map +1 -0
- package/src/lib/dto/render-content-template-layout.dto.d.ts +8 -0
- package/src/lib/dto/render-content-template-layout.dto.d.ts.map +1 -0
- package/src/lib/dto/render-content-template.dto.d.ts +9 -0
- package/src/lib/dto/render-content-template.dto.d.ts.map +1 -0
- package/src/lib/dto/render-template-layout.dto.d.ts +11 -0
- package/src/lib/dto/render-template-layout.dto.d.ts.map +1 -0
- package/src/lib/dto/render-template.dto.d.ts +15 -0
- package/src/lib/dto/render-template.dto.d.ts.map +1 -0
- package/src/lib/dto/template-filter.dto.d.ts +9 -0
- package/src/lib/dto/template-filter.dto.d.ts.map +1 -0
- package/src/lib/dto/template-layout-filter.dto.d.ts +8 -0
- package/src/lib/dto/template-layout-filter.dto.d.ts.map +1 -0
- package/src/lib/engines/language/html.engine.d.ts +10 -0
- package/src/lib/engines/language/html.engine.d.ts.map +1 -0
- package/src/lib/engines/language/{index.ts → index.d.ts} +1 -0
- package/src/lib/engines/language/index.d.ts.map +1 -0
- package/src/lib/engines/language/markdown.engine.d.ts +10 -0
- package/src/lib/engines/language/markdown.engine.d.ts.map +1 -0
- package/src/lib/engines/language/mjml.engine.d.ts +10 -0
- package/src/lib/engines/language/mjml.engine.d.ts.map +1 -0
- package/src/lib/engines/language/text.engine.d.ts +8 -0
- package/src/lib/engines/language/text.engine.d.ts.map +1 -0
- package/src/lib/engines/{language-engine.ts → language-engine.d.ts} +2 -7
- package/src/lib/engines/language-engine.d.ts.map +1 -0
- package/src/lib/engines/template/ejs.engine.d.ts +11 -0
- package/src/lib/engines/template/ejs.engine.d.ts.map +1 -0
- package/src/lib/engines/template/handlebars.engine.d.ts +11 -0
- package/src/lib/engines/template/handlebars.engine.d.ts.map +1 -0
- package/src/lib/engines/template/{index.ts → index.d.ts} +1 -0
- package/src/lib/engines/template/index.d.ts.map +1 -0
- package/src/lib/engines/template/nunjucks.engine.d.ts +17 -0
- package/src/lib/engines/template/nunjucks.engine.d.ts.map +1 -0
- package/src/lib/engines/template/pug.engine.d.ts +13 -0
- package/src/lib/engines/template/pug.engine.d.ts.map +1 -0
- package/src/lib/engines/{template-engine.ts → template-engine.d.ts} +2 -6
- package/src/lib/engines/template-engine.d.ts.map +1 -0
- package/src/lib/entities/template-layout.entity.d.ts +21 -0
- package/src/lib/entities/template-layout.entity.d.ts.map +1 -0
- package/src/lib/entities/template.entity.d.ts +22 -0
- package/src/lib/entities/template.entity.d.ts.map +1 -0
- package/src/lib/errors/template.errors.d.ts +20 -0
- package/src/lib/errors/template.errors.d.ts.map +1 -0
- package/src/lib/interfaces/{module-config.interface.ts → module-config.interface.d.ts} +2 -10
- package/src/lib/interfaces/module-config.interface.d.ts.map +1 -0
- package/src/lib/interfaces/template.types.d.ts +23 -0
- package/src/lib/interfaces/template.types.d.ts.map +1 -0
- package/src/lib/nest-dynamic-templates.module.d.ts +11 -0
- package/src/lib/nest-dynamic-templates.module.d.ts.map +1 -0
- package/src/lib/services/template-config.service.d.ts +55 -0
- package/src/lib/services/template-config.service.d.ts.map +1 -0
- package/src/lib/services/template-engine.registry.d.ts +22 -0
- package/src/lib/services/template-engine.registry.d.ts.map +1 -0
- package/src/lib/services/template-layout.service.d.ts +37 -0
- package/src/lib/services/template-layout.service.d.ts.map +1 -0
- package/src/lib/services/template.service.d.ts +39 -0
- package/src/lib/services/template.service.d.ts.map +1 -0
- package/src/test/helpers.d.ts +5 -0
- package/src/test/helpers.d.ts.map +1 -0
- package/src/test/test-database.config.d.ts +5 -0
- package/src/test/test-database.config.d.ts.map +1 -0
- package/src/test/test.setup.d.ts +4 -0
- package/src/test/test.setup.d.ts.map +1 -0
- package/eslint.config.mjs +0 -22
- package/jest.config.ts +0 -10
- package/project.json +0 -38
- package/src/lib/constant.ts +0 -2
- package/src/lib/dto/create-template-layout.dto.ts +0 -65
- package/src/lib/dto/create-template.dto.ts +0 -80
- package/src/lib/dto/render-content-template-layout.dto.ts +0 -32
- package/src/lib/dto/render-content-template.dto.ts +0 -37
- package/src/lib/dto/render-template-layout.dto.ts +0 -55
- package/src/lib/dto/render-template.dto.ts +0 -74
- package/src/lib/dto/template-filter.dto.ts +0 -52
- package/src/lib/dto/template-layout-filter.dto.ts +0 -51
- package/src/lib/engines/language/html.engine.ts +0 -49
- package/src/lib/engines/language/markdown.engine.ts +0 -37
- package/src/lib/engines/language/mjml.engine.ts +0 -44
- package/src/lib/engines/language/text.engine.ts +0 -15
- package/src/lib/engines/template/ejs.engine.ts +0 -33
- package/src/lib/engines/template/handlebars.engine.ts +0 -35
- package/src/lib/engines/template/nunjucks.engine.ts +0 -70
- package/src/lib/engines/template/pug.engine.ts +0 -43
- package/src/lib/entities/template-layout.entity.ts +0 -99
- package/src/lib/entities/template.entity.ts +0 -105
- package/src/lib/errors/template.errors.ts +0 -73
- package/src/lib/interfaces/template.types.ts +0 -25
- package/src/lib/nest-dynamic-templates.module.ts +0 -143
- package/src/lib/services/template-config.service.ts +0 -112
- package/src/lib/services/template-engine.registry.ts +0 -109
- package/src/lib/services/template-layout.service.ts +0 -407
- package/src/lib/services/template.service.ts +0 -476
- package/src/test/helpers.ts +0 -31
- package/src/test/nunjucks.service.spec.ts +0 -157
- package/src/test/pug.service.spec-temp +0 -254
- package/src/test/template-layout.service.spec.ts +0 -422
- package/src/test/template.service.spec.ts +0 -862
- package/src/test/test-database.config.ts +0 -24
- package/src/test/test-database.d.ts +0 -6
- package/src/test/test.setup.ts +0 -34
- package/src/types/ioredis.d.ts +0 -6
- package/src/types/mjml.d.ts +0 -5
- package/tsconfig.json +0 -17
- package/tsconfig.lib.json +0 -14
- package/tsconfig.spec.json +0 -15
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { BadRequestException, InternalServerErrorException } from '@nestjs/common';
|
|
2
|
-
|
|
3
|
-
export class TemplateRenderError extends InternalServerErrorException {
|
|
4
|
-
constructor(operation: string, originalError: Error, templateName?: string) {
|
|
5
|
-
const message = templateName
|
|
6
|
-
? `Failed to render template '${templateName}' during ${operation}: ${originalError.message}`
|
|
7
|
-
: `Failed to render content during ${operation}: ${originalError.message}`;
|
|
8
|
-
|
|
9
|
-
super({
|
|
10
|
-
message,
|
|
11
|
-
error: 'TEMPLATE_RENDER_ERROR',
|
|
12
|
-
operation,
|
|
13
|
-
templateName,
|
|
14
|
-
originalError: originalError.message,
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export class TemplateEngineError extends InternalServerErrorException {
|
|
20
|
-
constructor(engine: string, originalError: Error) {
|
|
21
|
-
super({
|
|
22
|
-
message: `Template engine '${engine}' failed to render content: ${originalError.message}`,
|
|
23
|
-
error: 'TEMPLATE_ENGINE_ERROR',
|
|
24
|
-
engine,
|
|
25
|
-
originalError: originalError.message,
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export class TemplateLanguageError extends InternalServerErrorException {
|
|
31
|
-
constructor(language: string, originalError: Error) {
|
|
32
|
-
super({
|
|
33
|
-
message: `Language processor '${language}' failed to render content: ${originalError.message}`,
|
|
34
|
-
error: 'TEMPLATE_LANGUAGE_ERROR',
|
|
35
|
-
language,
|
|
36
|
-
originalError: originalError.message,
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export class TemplateLayoutError extends InternalServerErrorException {
|
|
42
|
-
constructor(layoutName: string, originalError: Error) {
|
|
43
|
-
super({
|
|
44
|
-
message: `Template layout '${layoutName}' failed to render: ${originalError.message}`,
|
|
45
|
-
error: 'TEMPLATE_LAYOUT_ERROR',
|
|
46
|
-
layoutName,
|
|
47
|
-
originalError: originalError.message,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export class TemplateContentError extends InternalServerErrorException {
|
|
53
|
-
constructor(contentType: string, originalError: Error) {
|
|
54
|
-
super({
|
|
55
|
-
message: `Failed to process ${contentType} content: ${originalError.message}`,
|
|
56
|
-
error: 'TEMPLATE_CONTENT_ERROR',
|
|
57
|
-
contentType,
|
|
58
|
-
originalError: originalError.message,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export class TemplateValidationError extends BadRequestException {
|
|
64
|
-
constructor(field: string, value: any, reason: string) {
|
|
65
|
-
super({
|
|
66
|
-
message: `Template validation failed for field '${field}': ${reason}`,
|
|
67
|
-
error: 'TEMPLATE_VALIDATION_ERROR',
|
|
68
|
-
field,
|
|
69
|
-
value,
|
|
70
|
-
reason,
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export enum TemplateTypeEnum {
|
|
2
|
-
EMAIL = 'email',
|
|
3
|
-
SMS = 'sms',
|
|
4
|
-
PUSH = 'push',
|
|
5
|
-
PDF = 'pdf',
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export enum TemplateEngineEnum {
|
|
9
|
-
NUNJUCKS = 'njk',
|
|
10
|
-
HANDLEBARS = 'hbs',
|
|
11
|
-
EJS = 'ejs',
|
|
12
|
-
PUG = 'pug',
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export enum TemplateLanguageEnum {
|
|
16
|
-
MJML = 'mjml',
|
|
17
|
-
HTML = 'html',
|
|
18
|
-
MARKDOWN = 'md',
|
|
19
|
-
TEXT = 'txt',
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface Scope {
|
|
23
|
-
scope: string;
|
|
24
|
-
id: string;
|
|
25
|
-
}
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { Module, DynamicModule, Provider } from '@nestjs/common';
|
|
2
|
-
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
3
|
-
import { NestDynamicTemplate } from './entities/template.entity';
|
|
4
|
-
import { NestDynamicTemplateLayout } from './entities/template-layout.entity';
|
|
5
|
-
import {
|
|
6
|
-
NestDynamicTemplatesModuleConfig,
|
|
7
|
-
NestDynamicTemplatesModuleAsyncOptions,
|
|
8
|
-
NestDynamicTemplatesModuleOptionsFactory
|
|
9
|
-
} from './interfaces/module-config.interface';
|
|
10
|
-
import deepmerge from 'deepmerge';
|
|
11
|
-
import { TemplateEngineRegistryService } from './services/template-engine.registry';
|
|
12
|
-
import { TemplateLayoutService } from './services/template-layout.service';
|
|
13
|
-
import { TemplateService } from './services/template.service';
|
|
14
|
-
import { TemplateConfigService } from './services/template-config.service';
|
|
15
|
-
import { NEST_DYNAMIC_TEMPLATES_ASYNC_OPTIONS_PROVIDER } from './constant';
|
|
16
|
-
import { TemplateEngineEnum } from './interfaces/template.types';
|
|
17
|
-
import { TemplateLanguageEnum } from './interfaces/template.types';
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const defaultConfig: NestDynamicTemplatesModuleConfig = {
|
|
21
|
-
engines: {
|
|
22
|
-
template: [TemplateEngineEnum.NUNJUCKS],
|
|
23
|
-
language: [TemplateLanguageEnum.HTML, TemplateLanguageEnum.MJML, TemplateLanguageEnum.TEXT]
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@Module({
|
|
28
|
-
imports: [TypeOrmModule.forFeature([NestDynamicTemplate, NestDynamicTemplateLayout])],
|
|
29
|
-
providers: [
|
|
30
|
-
TemplateConfigService,
|
|
31
|
-
TemplateEngineRegistryService,
|
|
32
|
-
TemplateLayoutService,
|
|
33
|
-
TemplateService,
|
|
34
|
-
],
|
|
35
|
-
exports: [
|
|
36
|
-
TemplateConfigService,
|
|
37
|
-
TemplateService,
|
|
38
|
-
TemplateLayoutService,
|
|
39
|
-
],
|
|
40
|
-
})
|
|
41
|
-
export class NestDynamicTemplatesModule {
|
|
42
|
-
static moduleDefaultOptions: Partial<NestDynamicTemplatesModuleConfig> = defaultConfig;
|
|
43
|
-
|
|
44
|
-
static forRoot(config: NestDynamicTemplatesModuleConfig = {}): DynamicModule {
|
|
45
|
-
const mergedConfig = this.getOptions(config);
|
|
46
|
-
|
|
47
|
-
// Set options in static service
|
|
48
|
-
TemplateConfigService.setOptions(mergedConfig);
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
module: NestDynamicTemplatesModule,
|
|
52
|
-
global: mergedConfig.isGlobal,
|
|
53
|
-
imports: [
|
|
54
|
-
TypeOrmModule.forFeature([NestDynamicTemplate, NestDynamicTemplateLayout]),
|
|
55
|
-
],
|
|
56
|
-
providers: [
|
|
57
|
-
TemplateConfigService,
|
|
58
|
-
TemplateEngineRegistryService,
|
|
59
|
-
TemplateLayoutService,
|
|
60
|
-
TemplateService,
|
|
61
|
-
],
|
|
62
|
-
exports: [
|
|
63
|
-
TemplateConfigService,
|
|
64
|
-
TemplateService,
|
|
65
|
-
TemplateLayoutService,
|
|
66
|
-
],
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
static forRootAsync(options: NestDynamicTemplatesModuleAsyncOptions): DynamicModule {
|
|
71
|
-
const asyncProviders = this.createAsyncProviders(options);
|
|
72
|
-
|
|
73
|
-
return {
|
|
74
|
-
module: NestDynamicTemplatesModule,
|
|
75
|
-
global: options.isGlobal,
|
|
76
|
-
imports: [
|
|
77
|
-
TypeOrmModule.forFeature([NestDynamicTemplate, NestDynamicTemplateLayout]),
|
|
78
|
-
...(options.imports || []),
|
|
79
|
-
],
|
|
80
|
-
providers: [
|
|
81
|
-
...asyncProviders,
|
|
82
|
-
TemplateConfigService,
|
|
83
|
-
TemplateEngineRegistryService,
|
|
84
|
-
TemplateLayoutService,
|
|
85
|
-
TemplateService,
|
|
86
|
-
],
|
|
87
|
-
exports: [
|
|
88
|
-
TemplateConfigService,
|
|
89
|
-
TemplateService,
|
|
90
|
-
TemplateLayoutService,
|
|
91
|
-
],
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
private static createAsyncProviders(options: NestDynamicTemplatesModuleAsyncOptions): Provider[] {
|
|
96
|
-
if (options.useExisting || options.useFactory) {
|
|
97
|
-
return [this.createAsyncOptionsProvider(options)];
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (options.useClass) {
|
|
101
|
-
return [
|
|
102
|
-
this.createAsyncOptionsProvider(options),
|
|
103
|
-
{
|
|
104
|
-
provide: options.useClass,
|
|
105
|
-
useClass: options.useClass,
|
|
106
|
-
},
|
|
107
|
-
];
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return [];
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
private static createAsyncOptionsProvider(options: NestDynamicTemplatesModuleAsyncOptions): Provider {
|
|
114
|
-
if (options.useFactory) {
|
|
115
|
-
return {
|
|
116
|
-
provide: NEST_DYNAMIC_TEMPLATES_ASYNC_OPTIONS_PROVIDER,
|
|
117
|
-
useFactory: async (...args: any[]) => {
|
|
118
|
-
const userOptions = options.useFactory ? await options.useFactory(...args) : {};
|
|
119
|
-
const mergedOptions = this.getOptions(userOptions);
|
|
120
|
-
TemplateConfigService.setOptions(mergedOptions);
|
|
121
|
-
return mergedOptions;
|
|
122
|
-
},
|
|
123
|
-
inject: options.inject || [],
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return {
|
|
128
|
-
provide: NEST_DYNAMIC_TEMPLATES_ASYNC_OPTIONS_PROVIDER,
|
|
129
|
-
useFactory: async (optionsFactory: NestDynamicTemplatesModuleOptionsFactory) => {
|
|
130
|
-
const userOptions = await optionsFactory.createNestDynamicTemplatesModuleOptions();
|
|
131
|
-
const mergedOptions = this.getOptions(userOptions);
|
|
132
|
-
TemplateConfigService.setOptions(mergedOptions);
|
|
133
|
-
return mergedOptions;
|
|
134
|
-
},
|
|
135
|
-
inject: [options.useExisting || options.useClass!],
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
private static getOptions(options: NestDynamicTemplatesModuleConfig): NestDynamicTemplatesModuleConfig {
|
|
140
|
-
return deepmerge(this.moduleDefaultOptions, options);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { NestDynamicTemplatesModuleConfig } from '../interfaces/module-config.interface';
|
|
3
|
-
import { TemplateEngineEnum, TemplateLanguageEnum } from '../interfaces/template.types';
|
|
4
|
-
|
|
5
|
-
@Injectable()
|
|
6
|
-
export class TemplateConfigService {
|
|
7
|
-
private static config: NestDynamicTemplatesModuleConfig;
|
|
8
|
-
|
|
9
|
-
private static readonly defaultConfig: NestDynamicTemplatesModuleConfig = {
|
|
10
|
-
engines: {
|
|
11
|
-
template: [TemplateEngineEnum.NUNJUCKS],
|
|
12
|
-
language: [TemplateLanguageEnum.HTML, TemplateLanguageEnum.MJML, TemplateLanguageEnum.TEXT]
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Set the configuration options
|
|
18
|
-
*/
|
|
19
|
-
static setOptions(config: NestDynamicTemplatesModuleConfig): void {
|
|
20
|
-
this.config = { ...this.defaultConfig, ...config };
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Get the current configuration options
|
|
25
|
-
*/
|
|
26
|
-
static getOptions(): NestDynamicTemplatesModuleConfig {
|
|
27
|
-
if (!this.config) {
|
|
28
|
-
return this.defaultConfig;
|
|
29
|
-
}
|
|
30
|
-
return this.config;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Check if configuration has been set
|
|
35
|
-
*/
|
|
36
|
-
static hasConfig(): boolean {
|
|
37
|
-
return !!this.config;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Reset configuration to default
|
|
42
|
-
*/
|
|
43
|
-
static reset(): void {
|
|
44
|
-
this.config = { ...this.defaultConfig };
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Get a specific configuration value
|
|
49
|
-
*/
|
|
50
|
-
static get<K extends keyof NestDynamicTemplatesModuleConfig>(
|
|
51
|
-
key: K
|
|
52
|
-
): NestDynamicTemplatesModuleConfig[K] {
|
|
53
|
-
const config = this.getOptions();
|
|
54
|
-
return config[key];
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Check if a template engine is enabled
|
|
59
|
-
*/
|
|
60
|
-
static isTemplateEngineEnabled(engine: TemplateEngineEnum): boolean {
|
|
61
|
-
const config = this.getOptions();
|
|
62
|
-
return config.engines?.template?.includes(engine) ?? false;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Check if a language engine is enabled
|
|
67
|
-
*/
|
|
68
|
-
static isLanguageEngineEnabled(language: TemplateLanguageEnum): boolean {
|
|
69
|
-
const config = this.getOptions();
|
|
70
|
-
return config.engines?.language?.includes(language) ?? false;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Get enabled template engines
|
|
75
|
-
*/
|
|
76
|
-
static getEnabledTemplateEngines(): TemplateEngineEnum[] {
|
|
77
|
-
const config = this.getOptions();
|
|
78
|
-
return config.engines?.template ?? this.defaultConfig.engines!.template!;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Get enabled language engines
|
|
83
|
-
*/
|
|
84
|
-
static getEnabledLanguageEngines(): TemplateLanguageEnum[] {
|
|
85
|
-
const config = this.getOptions();
|
|
86
|
-
return config.engines?.language ?? this.defaultConfig.engines!.language!;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Get engine options for a specific template engine
|
|
91
|
-
*/
|
|
92
|
-
static getTemplateEngineOptions(engine: TemplateEngineEnum): any {
|
|
93
|
-
const config = this.getOptions();
|
|
94
|
-
return config.enginesOptions?.template?.[engine];
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Get engine options for a specific language engine
|
|
99
|
-
*/
|
|
100
|
-
static getLanguageEngineOptions(language: TemplateLanguageEnum): any {
|
|
101
|
-
const config = this.getOptions();
|
|
102
|
-
return config.enginesOptions?.language?.[language];
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Get custom filters
|
|
107
|
-
*/
|
|
108
|
-
static getCustomFilters(): Record<string, Function> {
|
|
109
|
-
const config = this.getOptions();
|
|
110
|
-
return config.enginesOptions?.filters ?? {};
|
|
111
|
-
}
|
|
112
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { TemplateEngineEnum, TemplateLanguageEnum } from '../interfaces/template.types';
|
|
3
|
-
import { NunjucksEngine } from '../engines/template/nunjucks.engine';
|
|
4
|
-
import { MjmlEngine } from '../engines/language/mjml.engine';
|
|
5
|
-
import { HtmlEngine } from '../engines/language/html.engine';
|
|
6
|
-
import { MarkdownEngine, TextEngine } from '../engines/language';
|
|
7
|
-
import { EjsEngine } from '../engines/template/ejs.engine';
|
|
8
|
-
import { HandlebarsEngine } from '../engines/template/handlebars.engine';
|
|
9
|
-
import { PugEngine } from '../engines/template/pug.engine';
|
|
10
|
-
import { TemplateConfigService } from './template-config.service';
|
|
11
|
-
import { TemplateEngine } from '../engines/template-engine';
|
|
12
|
-
import { LanguageEngine } from '../engines/language-engine';
|
|
13
|
-
import { NestDynamicTemplatesModuleConfig } from '../interfaces/module-config.interface';
|
|
14
|
-
|
|
15
|
-
type ClassType<T> = new (...args: any[]) => T;
|
|
16
|
-
|
|
17
|
-
@Injectable()
|
|
18
|
-
export class TemplateEngineRegistryService {
|
|
19
|
-
private templateEngines: Map<TemplateEngineEnum, TemplateEngine> = new Map();
|
|
20
|
-
private languageEngines: Map<TemplateLanguageEnum, LanguageEngine> = new Map();
|
|
21
|
-
private config: NestDynamicTemplatesModuleConfig;
|
|
22
|
-
|
|
23
|
-
constructor() {
|
|
24
|
-
this.config = TemplateConfigService.getOptions();
|
|
25
|
-
|
|
26
|
-
this.registerTemplateEngines([
|
|
27
|
-
NunjucksEngine,
|
|
28
|
-
HandlebarsEngine,
|
|
29
|
-
EjsEngine,
|
|
30
|
-
PugEngine
|
|
31
|
-
]);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
this.registerLanguageEngines([
|
|
35
|
-
MjmlEngine,
|
|
36
|
-
HtmlEngine,
|
|
37
|
-
TextEngine,
|
|
38
|
-
MarkdownEngine
|
|
39
|
-
]);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
registerTemplateEngines(engineClasses: ClassType<TemplateEngine>[]): void {
|
|
43
|
-
engineClasses.forEach(EngineClass => {
|
|
44
|
-
const engineName = (EngineClass as any).engineName;
|
|
45
|
-
if (!engineName) {
|
|
46
|
-
throw new Error(`Engine class ${EngineClass.name} must define static engineName property`);
|
|
47
|
-
}
|
|
48
|
-
const options = (this.config.enginesOptions?.template as any)?.[engineName];
|
|
49
|
-
|
|
50
|
-
const customOptions = {
|
|
51
|
-
filters: this.config.enginesOptions?.filters,
|
|
52
|
-
globalValues: this.config.enginesOptions?.globalValues
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
this.registerTemplateEngine(engineName, new EngineClass(options, customOptions));
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
registerTemplateEngine(format: TemplateEngineEnum, engine: TemplateEngine): void {
|
|
60
|
-
this.templateEngines.set(format, engine);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
registerLanguageEngine(format: TemplateLanguageEnum, engine: LanguageEngine): void {
|
|
64
|
-
this.languageEngines.set(format, engine);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
getTemplateEngine(format: TemplateEngineEnum): TemplateEngine {
|
|
68
|
-
const engine = this.templateEngines.get(format);
|
|
69
|
-
if (!engine) {
|
|
70
|
-
throw new Error(`Template engine not found for format: ${format}`);
|
|
71
|
-
}
|
|
72
|
-
return engine;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
getLanguageEngine(format: TemplateLanguageEnum): LanguageEngine {
|
|
76
|
-
const engine = this.languageEngines.get(format);
|
|
77
|
-
if (!engine) {
|
|
78
|
-
throw new Error(`Language engine not found for format: ${format}`);
|
|
79
|
-
}
|
|
80
|
-
return engine;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
registerLanguageEngines(engineClasses: ClassType<LanguageEngine>[]): void {
|
|
84
|
-
engineClasses.forEach(EngineClass => {
|
|
85
|
-
const engineName = (EngineClass as any).engineName;
|
|
86
|
-
if (!engineName) {
|
|
87
|
-
throw new Error(`Engine class ${EngineClass.name} must define static engineName property`);
|
|
88
|
-
}
|
|
89
|
-
const options = (this.config.enginesOptions?.language as any)?.[engineName];
|
|
90
|
-
this.registerLanguageEngine(engineName, new EngineClass(options));
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
hasTemplateEngine(format: TemplateEngineEnum): boolean {
|
|
95
|
-
return this.templateEngines.has(format);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
hasLanguageEngine(format: TemplateLanguageEnum): boolean {
|
|
99
|
-
return this.languageEngines.has(format);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
getSupportedTemplateFormats(): TemplateEngineEnum[] {
|
|
103
|
-
return Array.from(this.templateEngines.keys());
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
getSupportedLanguageFormats(): TemplateLanguageEnum[] {
|
|
107
|
-
return Array.from(this.languageEngines.keys());
|
|
108
|
-
}
|
|
109
|
-
}
|