@ackplus/nest-dynamic-templates 1.1.0 → 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.
Files changed (113) hide show
  1. package/package.json +2 -2
  2. package/src/{index.ts → index.d.ts} +2 -14
  3. package/src/index.d.ts.map +1 -0
  4. package/src/lib/constant.d.ts +3 -0
  5. package/src/lib/constant.d.ts.map +1 -0
  6. package/src/lib/dto/create-template-layout.dto.d.ts +16 -0
  7. package/src/lib/dto/create-template-layout.dto.d.ts.map +1 -0
  8. package/src/lib/dto/create-template.dto.d.ts +18 -0
  9. package/src/lib/dto/create-template.dto.d.ts.map +1 -0
  10. package/src/lib/dto/render-content-template-layout.dto.d.ts +8 -0
  11. package/src/lib/dto/render-content-template-layout.dto.d.ts.map +1 -0
  12. package/src/lib/dto/render-content-template.dto.d.ts +9 -0
  13. package/src/lib/dto/render-content-template.dto.d.ts.map +1 -0
  14. package/src/lib/dto/render-template-layout.dto.d.ts +11 -0
  15. package/src/lib/dto/render-template-layout.dto.d.ts.map +1 -0
  16. package/src/lib/dto/render-template.dto.d.ts +15 -0
  17. package/src/lib/dto/render-template.dto.d.ts.map +1 -0
  18. package/src/lib/dto/template-filter.dto.d.ts +9 -0
  19. package/src/lib/dto/template-filter.dto.d.ts.map +1 -0
  20. package/src/lib/dto/template-layout-filter.dto.d.ts +8 -0
  21. package/src/lib/dto/template-layout-filter.dto.d.ts.map +1 -0
  22. package/src/lib/engines/language/html.engine.d.ts +10 -0
  23. package/src/lib/engines/language/html.engine.d.ts.map +1 -0
  24. package/src/lib/engines/language/{index.ts → index.d.ts} +1 -0
  25. package/src/lib/engines/language/index.d.ts.map +1 -0
  26. package/src/lib/engines/language/markdown.engine.d.ts +10 -0
  27. package/src/lib/engines/language/markdown.engine.d.ts.map +1 -0
  28. package/src/lib/engines/language/mjml.engine.d.ts +10 -0
  29. package/src/lib/engines/language/mjml.engine.d.ts.map +1 -0
  30. package/src/lib/engines/language/text.engine.d.ts +8 -0
  31. package/src/lib/engines/language/text.engine.d.ts.map +1 -0
  32. package/src/lib/engines/{language-engine.ts → language-engine.d.ts} +2 -7
  33. package/src/lib/engines/language-engine.d.ts.map +1 -0
  34. package/src/lib/engines/template/ejs.engine.d.ts +11 -0
  35. package/src/lib/engines/template/ejs.engine.d.ts.map +1 -0
  36. package/src/lib/engines/template/handlebars.engine.d.ts +11 -0
  37. package/src/lib/engines/template/handlebars.engine.d.ts.map +1 -0
  38. package/src/lib/engines/template/{index.ts → index.d.ts} +1 -0
  39. package/src/lib/engines/template/index.d.ts.map +1 -0
  40. package/src/lib/engines/template/nunjucks.engine.d.ts +17 -0
  41. package/src/lib/engines/template/nunjucks.engine.d.ts.map +1 -0
  42. package/src/lib/engines/template/pug.engine.d.ts +13 -0
  43. package/src/lib/engines/template/pug.engine.d.ts.map +1 -0
  44. package/src/lib/engines/{template-engine.ts → template-engine.d.ts} +2 -6
  45. package/src/lib/engines/template-engine.d.ts.map +1 -0
  46. package/src/lib/entities/template-layout.entity.d.ts +21 -0
  47. package/src/lib/entities/template-layout.entity.d.ts.map +1 -0
  48. package/src/lib/entities/template.entity.d.ts +22 -0
  49. package/src/lib/entities/template.entity.d.ts.map +1 -0
  50. package/src/lib/errors/template.errors.d.ts +20 -0
  51. package/src/lib/errors/template.errors.d.ts.map +1 -0
  52. package/src/lib/interfaces/{module-config.interface.ts → module-config.interface.d.ts} +2 -10
  53. package/src/lib/interfaces/module-config.interface.d.ts.map +1 -0
  54. package/src/lib/interfaces/template.types.d.ts +23 -0
  55. package/src/lib/interfaces/template.types.d.ts.map +1 -0
  56. package/src/lib/nest-dynamic-templates.module.d.ts +11 -0
  57. package/src/lib/nest-dynamic-templates.module.d.ts.map +1 -0
  58. package/src/lib/services/template-config.service.d.ts +55 -0
  59. package/src/lib/services/template-config.service.d.ts.map +1 -0
  60. package/src/lib/services/template-engine.registry.d.ts +22 -0
  61. package/src/lib/services/template-engine.registry.d.ts.map +1 -0
  62. package/src/lib/services/template-layout.service.d.ts +37 -0
  63. package/src/lib/services/template-layout.service.d.ts.map +1 -0
  64. package/src/lib/services/template.service.d.ts +39 -0
  65. package/src/lib/services/template.service.d.ts.map +1 -0
  66. package/src/test/helpers.d.ts +5 -0
  67. package/src/test/helpers.d.ts.map +1 -0
  68. package/src/test/test-database.config.d.ts +5 -0
  69. package/src/test/test-database.config.d.ts.map +1 -0
  70. package/src/test/test.setup.d.ts +4 -0
  71. package/src/test/test.setup.d.ts.map +1 -0
  72. package/eslint.config.mjs +0 -22
  73. package/jest.config.ts +0 -10
  74. package/project.json +0 -38
  75. package/src/lib/constant.ts +0 -2
  76. package/src/lib/dto/create-template-layout.dto.ts +0 -65
  77. package/src/lib/dto/create-template.dto.ts +0 -80
  78. package/src/lib/dto/render-content-template-layout.dto.ts +0 -32
  79. package/src/lib/dto/render-content-template.dto.ts +0 -37
  80. package/src/lib/dto/render-template-layout.dto.ts +0 -55
  81. package/src/lib/dto/render-template.dto.ts +0 -74
  82. package/src/lib/dto/template-filter.dto.ts +0 -52
  83. package/src/lib/dto/template-layout-filter.dto.ts +0 -51
  84. package/src/lib/engines/language/html.engine.ts +0 -49
  85. package/src/lib/engines/language/markdown.engine.ts +0 -37
  86. package/src/lib/engines/language/mjml.engine.ts +0 -44
  87. package/src/lib/engines/language/text.engine.ts +0 -15
  88. package/src/lib/engines/template/ejs.engine.ts +0 -33
  89. package/src/lib/engines/template/handlebars.engine.ts +0 -35
  90. package/src/lib/engines/template/nunjucks.engine.ts +0 -70
  91. package/src/lib/engines/template/pug.engine.ts +0 -43
  92. package/src/lib/entities/template-layout.entity.ts +0 -99
  93. package/src/lib/entities/template.entity.ts +0 -105
  94. package/src/lib/errors/template.errors.ts +0 -73
  95. package/src/lib/interfaces/template.types.ts +0 -25
  96. package/src/lib/nest-dynamic-templates.module.ts +0 -143
  97. package/src/lib/services/template-config.service.ts +0 -112
  98. package/src/lib/services/template-engine.registry.ts +0 -109
  99. package/src/lib/services/template-layout.service.ts +0 -407
  100. package/src/lib/services/template.service.ts +0 -476
  101. package/src/test/helpers.ts +0 -31
  102. package/src/test/nunjucks.service.spec.ts +0 -157
  103. package/src/test/pug.service.spec-temp +0 -254
  104. package/src/test/template-layout.service.spec.ts +0 -422
  105. package/src/test/template.service.spec.ts +0 -862
  106. package/src/test/test-database.config.ts +0 -24
  107. package/src/test/test-database.d.ts +0 -6
  108. package/src/test/test.setup.ts +0 -34
  109. package/src/types/ioredis.d.ts +0 -6
  110. package/src/types/mjml.d.ts +0 -5
  111. package/tsconfig.json +0 -17
  112. package/tsconfig.lib.json +0 -14
  113. package/tsconfig.spec.json +0 -15
@@ -0,0 +1,55 @@
1
+ import { NestDynamicTemplatesModuleConfig } from '../interfaces/module-config.interface';
2
+ import { TemplateEngineEnum, TemplateLanguageEnum } from '../interfaces/template.types';
3
+ export declare class TemplateConfigService {
4
+ private static config;
5
+ private static readonly defaultConfig;
6
+ /**
7
+ * Set the configuration options
8
+ */
9
+ static setOptions(config: NestDynamicTemplatesModuleConfig): void;
10
+ /**
11
+ * Get the current configuration options
12
+ */
13
+ static getOptions(): NestDynamicTemplatesModuleConfig;
14
+ /**
15
+ * Check if configuration has been set
16
+ */
17
+ static hasConfig(): boolean;
18
+ /**
19
+ * Reset configuration to default
20
+ */
21
+ static reset(): void;
22
+ /**
23
+ * Get a specific configuration value
24
+ */
25
+ static get<K extends keyof NestDynamicTemplatesModuleConfig>(key: K): NestDynamicTemplatesModuleConfig[K];
26
+ /**
27
+ * Check if a template engine is enabled
28
+ */
29
+ static isTemplateEngineEnabled(engine: TemplateEngineEnum): boolean;
30
+ /**
31
+ * Check if a language engine is enabled
32
+ */
33
+ static isLanguageEngineEnabled(language: TemplateLanguageEnum): boolean;
34
+ /**
35
+ * Get enabled template engines
36
+ */
37
+ static getEnabledTemplateEngines(): TemplateEngineEnum[];
38
+ /**
39
+ * Get enabled language engines
40
+ */
41
+ static getEnabledLanguageEngines(): TemplateLanguageEnum[];
42
+ /**
43
+ * Get engine options for a specific template engine
44
+ */
45
+ static getTemplateEngineOptions(engine: TemplateEngineEnum): any;
46
+ /**
47
+ * Get engine options for a specific language engine
48
+ */
49
+ static getLanguageEngineOptions(language: TemplateLanguageEnum): any;
50
+ /**
51
+ * Get custom filters
52
+ */
53
+ static getCustomFilters(): Record<string, Function>;
54
+ }
55
+ //# sourceMappingURL=template-config.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-config.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-dynamic-templates/src/lib/services/template-config.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAExF,qBACa,qBAAqB;IAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAmC;IAExD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAKnC;IAEF;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,gCAAgC,GAAG,IAAI;IAIjE;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,gCAAgC;IAOrD;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,gCAAgC,EACvD,GAAG,EAAE,CAAC,GACP,gCAAgC,CAAC,CAAC,CAAC;IAKtC;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAKnE;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO;IAKvE;;OAEG;IACH,MAAM,CAAC,yBAAyB,IAAI,kBAAkB,EAAE;IAKxD;;OAEG;IACH,MAAM,CAAC,yBAAyB,IAAI,oBAAoB,EAAE;IAK1D;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,GAAG;IAKhE;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,GAAG;IAKpE;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;CAItD"}
@@ -0,0 +1,22 @@
1
+ import { TemplateEngineEnum, TemplateLanguageEnum } from '../interfaces/template.types';
2
+ import { TemplateEngine } from '../engines/template-engine';
3
+ import { LanguageEngine } from '../engines/language-engine';
4
+ type ClassType<T> = new (...args: any[]) => T;
5
+ export declare class TemplateEngineRegistryService {
6
+ private templateEngines;
7
+ private languageEngines;
8
+ private config;
9
+ constructor();
10
+ registerTemplateEngines(engineClasses: ClassType<TemplateEngine>[]): void;
11
+ registerTemplateEngine(format: TemplateEngineEnum, engine: TemplateEngine): void;
12
+ registerLanguageEngine(format: TemplateLanguageEnum, engine: LanguageEngine): void;
13
+ getTemplateEngine(format: TemplateEngineEnum): TemplateEngine;
14
+ getLanguageEngine(format: TemplateLanguageEnum): LanguageEngine;
15
+ registerLanguageEngines(engineClasses: ClassType<LanguageEngine>[]): void;
16
+ hasTemplateEngine(format: TemplateEngineEnum): boolean;
17
+ hasLanguageEngine(format: TemplateLanguageEnum): boolean;
18
+ getSupportedTemplateFormats(): TemplateEngineEnum[];
19
+ getSupportedLanguageFormats(): TemplateLanguageEnum[];
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=template-engine.registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.registry.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-dynamic-templates/src/lib/services/template-engine.registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AASxF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,KAAK,SAAS,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAE9C,qBACa,6BAA6B;IACtC,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,eAAe,CAAwD;IAC/E,OAAO,CAAC,MAAM,CAAmC;;IAqBjD,uBAAuB,CAAC,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI;IAiBzE,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAIhF,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAIlF,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc;IAQ7D,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc;IAQ/D,uBAAuB,CAAC,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI;IAWzE,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAItD,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO;IAIxD,2BAA2B,IAAI,kBAAkB,EAAE;IAInD,2BAA2B,IAAI,oBAAoB,EAAE;CAGxD"}
@@ -0,0 +1,37 @@
1
+ import { Repository } from 'typeorm';
2
+ import { NestDynamicTemplateLayout } from '../entities/template-layout.entity';
3
+ import { TemplateEngineEnum, TemplateLanguageEnum } from '../interfaces/template.types';
4
+ import { TemplateLayoutFilterDto } from '../dto/template-layout-filter.dto';
5
+ import { TemplateEngineRegistryService } from './template-engine.registry';
6
+ import { RenderTemplateLayoutDto, RenderTemplateLayoutOutput } from '../dto/render-template-layout.dto';
7
+ import { CreateTemplateLayoutDto } from '../dto/create-template-layout.dto';
8
+ import { RenderContentTemplateLayoutDto } from '../dto/render-content-template-layout.dto';
9
+ export declare class TemplateLayoutService {
10
+ private readonly layoutRepository;
11
+ private readonly engineRegistry;
12
+ constructor(layoutRepository: Repository<NestDynamicTemplateLayout>, engineRegistry: TemplateEngineRegistryService);
13
+ render(renderDto: RenderTemplateLayoutDto): Promise<RenderTemplateLayoutOutput>;
14
+ renderContent(input: RenderContentTemplateLayoutDto): Promise<string>;
15
+ renderLanguage(language: TemplateLanguageEnum, content: string, context: Record<string, any>): Promise<string>;
16
+ renderEngine(engine: TemplateEngineEnum, content: string, context: Record<string, any>): Promise<string>;
17
+ /**
18
+ * Get all templates, with scoped templates taking precedence over system templates
19
+ */
20
+ getTemplateLayouts(filter?: TemplateLayoutFilterDto): Promise<NestDynamicTemplateLayout[]>;
21
+ getTemplateLayoutById(id: string): Promise<NestDynamicTemplateLayout | null>;
22
+ findTemplateLayout(name: string, scope?: string, scopeId?: string, locale?: string): Promise<NestDynamicTemplateLayout | null>;
23
+ /**
24
+ * Create a system template. Only system templates can be created directly.
25
+ */
26
+ createTemplateLayout(data: CreateTemplateLayoutDto): Promise<NestDynamicTemplateLayout>;
27
+ overwriteSystemTemplateLayout(templateId: string, updates: Partial<CreateTemplateLayoutDto>): Promise<NestDynamicTemplateLayout>;
28
+ /**
29
+ * Update a template
30
+ */
31
+ updateTemplateLayout(id: string, updates: Partial<CreateTemplateLayoutDto>, canUpdateSystemTemplate?: boolean): Promise<NestDynamicTemplateLayout>;
32
+ /**
33
+ * Delete a scoped template
34
+ */
35
+ deleteTemplateLayout(id: string, canDeleteSystemTemplate?: boolean): Promise<void>;
36
+ }
37
+ //# sourceMappingURL=template-layout.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-layout.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-dynamic-templates/src/lib/services/template-layout.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAoB,MAAM,8BAA8B,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AACxG,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAO3F,qBACa,qBAAqB;IAG1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADd,gBAAgB,EAAE,UAAU,CAAC,yBAAyB,CAAC,EACvD,cAAc,EAAE,6BAA6B;IAI5D,MAAM,CAAC,SAAS,EAAE,uBAAuB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAoD/E,aAAa,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,MAAM,CAAC;IA0CrE,cAAc,CAAC,QAAQ,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB9G,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB9G;;OAEG;IACG,kBAAkB,CAAC,MAAM,GAAE,uBAA4B,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAyD9F,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAM5E,kBAAkB,CACpB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;IA8C5C;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IA4BvF,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,yBAAyB,CAAC;IA+CtI;;OAEG;IACG,oBAAoB,CACtB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,uBAAuB,CAAC,EACzC,uBAAuB,GAAE,OAAe,GACzC,OAAO,CAAC,yBAAyB,CAAC;IA0BrC;;OAEG;IACG,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,uBAAuB,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBlG"}
@@ -0,0 +1,39 @@
1
+ import { Repository } from 'typeorm';
2
+ import { NestDynamicTemplate } from '../entities/template.entity';
3
+ import { TemplateEngineEnum, TemplateLanguageEnum } from '../interfaces/template.types';
4
+ import { RenderTemplateDto, RenderTemplateOutputDTO } from '../dto/render-template.dto';
5
+ import { CreateTemplateDto } from '../dto/create-template.dto';
6
+ import { TemplateFilterDto } from '../dto/template-filter.dto';
7
+ import { TemplateLayoutService } from './template-layout.service';
8
+ import { TemplateEngineRegistryService } from './template-engine.registry';
9
+ import { RenderContentTemplateDto } from '../dto/render-content-template.dto';
10
+ export declare class TemplateService {
11
+ private readonly templateRepository;
12
+ private readonly engineRegistry;
13
+ private readonly templateLayoutService;
14
+ constructor(templateRepository: Repository<NestDynamicTemplate>, engineRegistry: TemplateEngineRegistryService, templateLayoutService: TemplateLayoutService);
15
+ render(renderDto: RenderTemplateDto): Promise<RenderTemplateOutputDTO>;
16
+ renderContent(input: RenderContentTemplateDto): Promise<string>;
17
+ renderLanguage(language: TemplateLanguageEnum, content: string, context: Record<string, any>): Promise<string>;
18
+ renderEngine(engine: TemplateEngineEnum, content: string, context: Record<string, any>): Promise<string>;
19
+ /**
20
+ * Get all templates, with scoped templates taking precedence over system templates
21
+ */
22
+ getTemplates(filter?: TemplateFilterDto): Promise<NestDynamicTemplate[]>;
23
+ getTemplateById(id: string): Promise<NestDynamicTemplate | null>;
24
+ findTemplate(name: string, scope?: string, scopeId?: string, locale?: string): Promise<NestDynamicTemplate | null>;
25
+ /**
26
+ * Create a system template. Only system templates can be created directly.
27
+ */
28
+ createTemplate(data: CreateTemplateDto): Promise<NestDynamicTemplate>;
29
+ overwriteSystemTemplate(templateId: string, updates: Partial<CreateTemplateDto>): Promise<NestDynamicTemplate>;
30
+ /**
31
+ * Update a template
32
+ */
33
+ updateTemplate(id: string, updates: Partial<CreateTemplateDto>, canUpdateSystemTemplate?: boolean): Promise<NestDynamicTemplate>;
34
+ /**
35
+ * Delete a scoped template
36
+ */
37
+ deleteTemplate(id: string, canDeleteSystemTemplate?: boolean): Promise<void>;
38
+ }
39
+ //# sourceMappingURL=template.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/nest-dynamic-templates/src/lib/services/template.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,UAAU,EAAkB,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAoB,MAAM,8BAA8B,CAAC;AAC1G,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAU9E,qBACa,eAAe;IAGpB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBAFrB,kBAAkB,EAAE,UAAU,CAAC,mBAAmB,CAAC,EACnD,cAAc,EAAE,6BAA6B,EAC7C,qBAAqB,EAAE,qBAAqB;IAG3D,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkFtE,aAAa,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4E/D,cAAc,CAAC,QAAQ,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB9G,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB9G;;OAEG;IACG,YAAY,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAyD5E,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAMhE,YAAY,CACd,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA8CtC;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4BrE,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgDpH;;OAEG;IACG,cAAc,CAChB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,uBAAuB,GAAE,OAAe,GACzC,OAAO,CAAC,mBAAmB,CAAC;IAyB/B;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,uBAAuB,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB5F"}
@@ -0,0 +1,5 @@
1
+ export declare const engineFilters: {
2
+ formatDate: (date: Date, format: string) => string;
3
+ formatCurrency: (amount: number, currency: string) => string;
4
+ };
5
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../packages/nest-dynamic-templates/src/test/helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;uBACH,IAAI,UAAU,MAAM;6BAoBd,MAAM,YAAY,MAAM;CASpD,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { TypeOrmModuleOptions } from '@nestjs/typeorm';
2
+ import { RedisModuleOptions } from '@nestjs-modules/ioredis';
3
+ export declare const testDatabaseConfig: TypeOrmModuleOptions;
4
+ export declare const testRedisConfig: RedisModuleOptions;
5
+ //# sourceMappingURL=test-database.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-database.config.d.ts","sourceRoot":"","sources":["../../../../../packages/nest-dynamic-templates/src/test/test-database.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAI7D,eAAO,MAAM,kBAAkB,EAAE,oBAOhC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,kBAS7B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { NestDynamicTemplatesModuleConfig } from '../lib/interfaces/module-config.interface';
2
+ export declare function createTestModule(options?: Partial<NestDynamicTemplatesModuleConfig>): Promise<import("@nestjs/testing").TestingModule>;
3
+ export declare function createTestApp(options?: Partial<NestDynamicTemplatesModuleConfig>): Promise<import("@nestjs/common").INestApplication<any>>;
4
+ //# sourceMappingURL=test.setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.setup.d.ts","sourceRoot":"","sources":["../../../../../packages/nest-dynamic-templates/src/test/test.setup.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gCAAgC,EAAE,MAAM,2CAA2C,CAAC;AAG7F,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,OAAO,CAAC,gCAAgC,CAAM,oDAY7F;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,OAAO,CAAC,gCAAgC,CAAM,2DAU1F"}
package/eslint.config.mjs DELETED
@@ -1,22 +0,0 @@
1
- import baseConfig from '../../eslint.base.config';
2
-
3
- export default [
4
- ...baseConfig,
5
- {
6
- files: ['**/*.json'],
7
- rules: {
8
- '@nx/dependency-checks': [
9
- 'error',
10
- {
11
- ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs,ts,cts,mts}'],
12
- },
13
- ],
14
- },
15
- languageOptions: {
16
- parser: await import('jsonc-eslint-parser'),
17
- },
18
- },
19
- {
20
- ignores: ['**/out-tsc'],
21
- },
22
- ];
package/jest.config.ts DELETED
@@ -1,10 +0,0 @@
1
- export default {
2
- displayName: 'nest-dynamic-templates',
3
- preset: '../../jest.preset.js',
4
- testEnvironment: 'node',
5
- transform: {
6
- '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
7
- },
8
- moduleFileExtensions: ['ts', 'js', 'html'],
9
- coverageDirectory: '../../coverage/packages/nest-dynamic-templates',
10
- };
package/project.json DELETED
@@ -1,38 +0,0 @@
1
- {
2
- "name": "nest-dynamic-templates",
3
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "packages/nest-dynamic-templates/src",
5
- "projectType": "library",
6
- "release": {
7
- "version": {
8
- "manifestRootsToUpdate": [
9
- "dist/{projectRoot}"
10
- ],
11
- "currentVersionResolver": "git-tag",
12
- "fallbackCurrentVersionResolver": "disk"
13
- }
14
- },
15
- "tags": [],
16
- "targets": {
17
- "build": {
18
- "executor": "@nx/js:tsc",
19
- "outputs": [
20
- "{options.outputPath}"
21
- ],
22
- "options": {
23
- "outputPath": "dist/packages/nest-dynamic-templates",
24
- "tsConfig": "packages/nest-dynamic-templates/tsconfig.lib.json",
25
- "packageJson": "packages/nest-dynamic-templates/package.json",
26
- "main": "packages/nest-dynamic-templates/src/index.ts",
27
- "assets": [
28
- "packages/nest-dynamic-templates/*.md"
29
- ]
30
- }
31
- },
32
- "nx-release-publish": {
33
- "options": {
34
- "packageRoot": "dist/{projectRoot}"
35
- }
36
- }
37
- }
38
- }
@@ -1,2 +0,0 @@
1
- export const NEST_DYNAMIC_TEMPLATES_MODULE_CONFIG = Symbol('NEST_DYNAMIC_TEMPLATES_MODULE_CONFIG');
2
- export const NEST_DYNAMIC_TEMPLATES_ASYNC_OPTIONS_PROVIDER = 'NEST_DYNAMIC_TEMPLATES_ASYNC_OPTIONS_PROVIDER';
@@ -1,65 +0,0 @@
1
- import { IsString, IsEnum, IsOptional, IsNotEmpty, Matches } from 'class-validator';
2
- import { TemplateEngineEnum, TemplateLanguageEnum } from '../interfaces/template.types';
3
- import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
4
-
5
-
6
- export class CreateTemplateLayoutDto {
7
-
8
- @ApiProperty({ type: String })
9
- @IsString()
10
- @IsNotEmpty()
11
- @Matches(/^[a-z0-9\-_]+$/, { message: 'Invalid template name format' })
12
- name: string;
13
-
14
- @ApiProperty({ type: String })
15
- @IsString()
16
- @IsOptional()
17
- type?: string;
18
-
19
- @ApiPropertyOptional({ type: String })
20
- @IsString()
21
- @IsNotEmpty()
22
- displayName: string;
23
-
24
- @ApiProperty({ type: String, nullable: true })
25
- @IsString()
26
- @IsOptional()
27
- description?: string;
28
-
29
- @ApiProperty({ enum: TemplateEngineEnum, type: String })
30
- @IsEnum(TemplateEngineEnum)
31
- @IsOptional()
32
- engine: TemplateEngineEnum = TemplateEngineEnum.NUNJUCKS;
33
-
34
- @ApiProperty({ enum: TemplateLanguageEnum, type: String })
35
- @IsEnum(TemplateLanguageEnum)
36
- @IsNotEmpty()
37
- language: TemplateLanguageEnum;
38
-
39
- @ApiProperty({ type: String, nullable: true })
40
- @IsString()
41
- content: string;
42
-
43
- @ApiPropertyOptional({ type: String, default: 'system' })
44
- @IsString()
45
- @IsOptional()
46
- scope: string = 'system';
47
-
48
- @ApiPropertyOptional({ type: String })
49
- @IsString()
50
- @IsOptional()
51
- scopeId?: string;
52
-
53
- @ApiPropertyOptional({ type: String, nullable: true, default: 'en' })
54
- @IsString()
55
- @IsOptional()
56
- locale?: string = 'en';
57
-
58
- @ApiPropertyOptional({ type: Object, nullable: true })
59
- @IsOptional()
60
- previewContext?: Record<string, any>;
61
-
62
- @ApiPropertyOptional({ type: Boolean, nullable: true })
63
- @IsOptional()
64
- isActive?: boolean = true;
65
- }
@@ -1,80 +0,0 @@
1
- import { IsString, IsEnum, IsOptional, IsNotEmpty, Matches, IsBoolean } from 'class-validator';
2
- import { TemplateEngineEnum, TemplateLanguageEnum, TemplateTypeEnum } from '../interfaces/template.types';
3
- import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
4
- import { Transform } from 'class-transformer';
5
-
6
- export class CreateTemplateDto {
7
-
8
- @ApiProperty({ type: String })
9
- @IsString()
10
- @IsNotEmpty()
11
- @Matches(/^[a-z0-9\-_]+$/, { message: 'Invalid template name format' })
12
- name: string;
13
-
14
- @ApiPropertyOptional({ type: String, nullable: true })
15
- @IsString()
16
- @IsOptional()
17
- templateLayoutName?: string;
18
-
19
- @ApiProperty({ type: String })
20
- @IsString()
21
- @IsOptional()
22
- type?: string;
23
-
24
- @ApiPropertyOptional({ type: String })
25
- @IsString()
26
- @IsNotEmpty()
27
- displayName: string;
28
-
29
- @ApiProperty({ type: String, nullable: true })
30
- @IsString()
31
- @IsOptional()
32
- description?: string;
33
-
34
- @ApiProperty({ enum: TemplateEngineEnum, type: String })
35
- @IsEnum(TemplateEngineEnum)
36
- @IsOptional()
37
- engine: TemplateEngineEnum = TemplateEngineEnum.NUNJUCKS;
38
-
39
- @ApiProperty({ enum: TemplateLanguageEnum, type: String })
40
- @IsEnum(TemplateLanguageEnum)
41
- language: TemplateLanguageEnum;
42
-
43
- @ApiProperty({ type: String, nullable: true })
44
- @IsString()
45
- @IsOptional()
46
- content: string;
47
-
48
- @ApiPropertyOptional({ type: String, nullable: true })
49
- @IsString()
50
- @IsOptional()
51
- subject?: string;
52
-
53
- @ApiPropertyOptional({ type: String, default: 'system' })
54
- @IsString()
55
- @IsOptional()
56
- @Transform(({ value }) => value || 'system')
57
- scope: string = 'system';
58
-
59
- @ApiPropertyOptional({ type: String })
60
- @IsString()
61
- @IsOptional()
62
- scopeId?: string;
63
-
64
- @ApiPropertyOptional({ type: String, nullable: true, default: 'en' })
65
- @IsString()
66
- @IsOptional()
67
- @IsNotEmpty()
68
- @Transform(({ value }) => value || 'en')
69
- locale?: string = 'en';
70
-
71
- @ApiPropertyOptional({ type: Object, nullable: true })
72
- @IsOptional()
73
- previewContext?: Record<string, any>;
74
-
75
- @ApiPropertyOptional({ type: Boolean, nullable: true })
76
- @IsBoolean()
77
- @IsOptional()
78
- isActive?: boolean = true;
79
-
80
- }
@@ -1,32 +0,0 @@
1
- import { IsString, IsEnum, IsObject, IsOptional, IsNotEmpty } from 'class-validator';
2
- import { TemplateEngineEnum, TemplateLanguageEnum } from '../interfaces/template.types';
3
- import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
4
- import { Transform } from 'class-transformer';
5
-
6
-
7
- export class RenderContentTemplateLayoutDto {
8
- @ApiProperty({ type: String })
9
- @IsString()
10
- @IsNotEmpty()
11
- content?: string;
12
-
13
- @ApiProperty({ enum: TemplateLanguageEnum, type: String })
14
- @IsEnum(TemplateLanguageEnum)
15
- @IsNotEmpty()
16
- @Transform(({ value }) => value || TemplateLanguageEnum.HTML)
17
- language?: TemplateLanguageEnum;
18
-
19
- @ApiProperty({ enum: TemplateEngineEnum, type: String })
20
- @IsEnum(TemplateEngineEnum)
21
- @Transform(({ value }) => value || TemplateEngineEnum.NUNJUCKS)
22
- engine?: TemplateEngineEnum;
23
-
24
- @ApiPropertyOptional({
25
- type: String,
26
- nullable: true,
27
- description: 'The context of the template'
28
- })
29
- @IsObject()
30
- @IsOptional()
31
- context?: Record<string, any>;
32
- }
@@ -1,37 +0,0 @@
1
- import { IsString, IsEnum, IsObject, IsOptional, IsNotEmpty } from 'class-validator';
2
- import { TemplateEngineEnum, TemplateLanguageEnum } from '../interfaces/template.types';
3
- import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
4
- import { Transform } from 'class-transformer';
5
-
6
-
7
- export class RenderContentTemplateDto {
8
- @ApiProperty({ type: String })
9
- @IsString()
10
- @IsNotEmpty()
11
- content?: string;
12
-
13
- @ApiProperty({ enum: TemplateLanguageEnum, type: String })
14
- @IsEnum(TemplateLanguageEnum)
15
- @IsNotEmpty()
16
- @Transform(({ value }) => value || TemplateLanguageEnum.HTML)
17
- language?: TemplateLanguageEnum;
18
-
19
- @ApiProperty({ enum: TemplateEngineEnum, type: String })
20
- @IsEnum(TemplateEngineEnum)
21
- @Transform(({ value }) => value || TemplateEngineEnum.NUNJUCKS)
22
- engine?: TemplateEngineEnum;
23
-
24
- @ApiPropertyOptional({
25
- type: String,
26
- nullable: true,
27
- description: 'The context of the template'
28
- })
29
- @IsObject()
30
- @IsOptional()
31
- context?: Record<string, any>;
32
-
33
- @ApiPropertyOptional({ type: String })
34
- @IsString()
35
- @IsOptional()
36
- templateLayoutId?: string;
37
- }
@@ -1,55 +0,0 @@
1
- import { IsString, IsEnum, IsObject, IsOptional, IsNotEmpty } from 'class-validator';
2
- import { TemplateTypeEnum } from '../interfaces/template.types';
3
- import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
4
-
5
-
6
- export class RenderTemplateLayoutDto {
7
-
8
- @ApiPropertyOptional({
9
- type: String,
10
- default: 'en',
11
- description: 'The locale code, i.e en, fr, es, etc.'
12
- })
13
- @IsString()
14
- @IsOptional()
15
- locale?: string = 'en';
16
-
17
- @ApiProperty({ type: String })
18
- @IsString()
19
- @IsNotEmpty()
20
- name: string;
21
-
22
- @ApiProperty({
23
- type: String,
24
- default: 'system',
25
- description: 'The scope of the template, i.e user, organization, etc.'
26
- })
27
- @IsString()
28
- scope: string;
29
-
30
- @ApiPropertyOptional({
31
- type: String,
32
- default: null,
33
- description: 'The scope id of the template, i.e user id, organization id, etc.'
34
- })
35
- @IsString()
36
- @IsOptional()
37
- scopeId?: string;
38
-
39
- @ApiPropertyOptional({
40
- type: String,
41
- nullable: true,
42
- description: 'The context of the template'
43
- })
44
- @IsObject()
45
- @IsOptional()
46
- context?: Record<string, any>;
47
- }
48
-
49
-
50
- export class RenderTemplateLayoutOutput {
51
- @ApiProperty({ type: String })
52
- @IsString()
53
- @IsNotEmpty()
54
- content: string;
55
- }
@@ -1,74 +0,0 @@
1
- import { IsString, IsEnum, IsObject, IsOptional, IsNotEmpty, Matches, ValidateIf } from 'class-validator';
2
- import { TemplateLanguageEnum, TemplateTypeEnum } from '../interfaces/template.types';
3
- import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
4
-
5
-
6
- export class RenderTemplateDto {
7
-
8
- @ApiPropertyOptional({
9
- type: String,
10
- default: 'en',
11
- description: 'The locale code, i.e en, fr, es, etc.'
12
- })
13
- @IsString()
14
- @IsOptional()
15
- locale?: string = 'en';
16
-
17
- @ApiProperty({ type: String })
18
- @IsString()
19
- @IsNotEmpty()
20
- @ValidateIf((object, value) => !object?.content)
21
- name?: string;
22
-
23
- @ApiProperty({ type: String })
24
- @IsString()
25
- @IsNotEmpty()
26
- @ValidateIf((object, value) => !object?.name)
27
- content?: string;
28
-
29
- @ApiProperty({ enum: TemplateLanguageEnum, type: String })
30
- @IsEnum(TemplateLanguageEnum)
31
- @IsNotEmpty()
32
- @ValidateIf((object, value) => !object?.name)
33
- language?: TemplateLanguageEnum;
34
-
35
- @ApiPropertyOptional({
36
- type: String,
37
- default: 'system',
38
- description: 'The scope of the template, i.e user, organization, etc.'
39
- })
40
- @IsString()
41
- @IsOptional()
42
- scope?: string = 'system';
43
-
44
- @ApiPropertyOptional({
45
- type: String,
46
- default: null,
47
- description: 'The scope id of the template, i.e user id, organization id, etc.'
48
- })
49
- @IsString()
50
- @IsOptional()
51
- scopeId?: string;
52
-
53
- @ApiPropertyOptional({
54
- type: String,
55
- nullable: true,
56
- description: 'The context of the template'
57
- })
58
- @IsObject()
59
- @IsOptional()
60
- context?: Record<string, any>;
61
- }
62
-
63
-
64
- export class RenderTemplateOutputDTO {
65
- @ApiProperty({ type: String })
66
- @IsString()
67
- @IsNotEmpty()
68
- content: string;
69
-
70
- @ApiProperty({ type: String })
71
- @IsString()
72
- @IsNotEmpty()
73
- subject: string;
74
- }