@ackplus/nest-dynamic-templates 1.1.16 → 2.0.0

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 (80) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/MIGRATION.md +97 -0
  3. package/README.md +201 -116
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.js +2 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/config/resolve-config.d.ts +7 -0
  8. package/dist/lib/config/resolve-config.js +50 -0
  9. package/dist/lib/config/resolve-config.js.map +1 -0
  10. package/dist/lib/constant.d.ts +1 -0
  11. package/dist/lib/constant.js +2 -1
  12. package/dist/lib/constant.js.map +1 -1
  13. package/dist/lib/dto/create-template-layout.dto.js +49 -12
  14. package/dist/lib/dto/create-template-layout.dto.js.map +1 -1
  15. package/dist/lib/dto/create-template.dto.js +59 -14
  16. package/dist/lib/dto/create-template.dto.js.map +1 -1
  17. package/dist/lib/dto/render-template.dto.d.ts +3 -6
  18. package/dist/lib/dto/render-template.dto.js +17 -38
  19. package/dist/lib/dto/render-template.dto.js.map +1 -1
  20. package/dist/lib/engines/language/html.engine.d.ts +2 -3
  21. package/dist/lib/engines/language/html.engine.js +4 -34
  22. package/dist/lib/engines/language/html.engine.js.map +1 -1
  23. package/dist/lib/engines/language/markdown.engine.d.ts +4 -2
  24. package/dist/lib/engines/language/markdown.engine.js +20 -20
  25. package/dist/lib/engines/language/markdown.engine.js.map +1 -1
  26. package/dist/lib/engines/language/mjml.engine.d.ts +4 -2
  27. package/dist/lib/engines/language/mjml.engine.js +18 -20
  28. package/dist/lib/engines/language/mjml.engine.js.map +1 -1
  29. package/dist/lib/engines/language/text.engine.d.ts +2 -1
  30. package/dist/lib/engines/language/text.engine.js +2 -1
  31. package/dist/lib/engines/language/text.engine.js.map +1 -1
  32. package/dist/lib/engines/language-engine.d.ts +4 -1
  33. package/dist/lib/engines/language-engine.js +2 -0
  34. package/dist/lib/engines/language-engine.js.map +1 -1
  35. package/dist/lib/engines/load-peer.d.ts +1 -0
  36. package/dist/lib/engines/load-peer.js +21 -0
  37. package/dist/lib/engines/load-peer.js.map +1 -0
  38. package/dist/lib/engines/template/ejs.engine.d.ts +6 -3
  39. package/dist/lib/engines/template/ejs.engine.js +13 -12
  40. package/dist/lib/engines/template/ejs.engine.js.map +1 -1
  41. package/dist/lib/engines/template/handlebars.engine.d.ts +8 -3
  42. package/dist/lib/engines/template/handlebars.engine.js +26 -13
  43. package/dist/lib/engines/template/handlebars.engine.js.map +1 -1
  44. package/dist/lib/engines/template/nunjucks.engine.d.ts +8 -8
  45. package/dist/lib/engines/template/nunjucks.engine.js +25 -37
  46. package/dist/lib/engines/template/nunjucks.engine.js.map +1 -1
  47. package/dist/lib/engines/template/pug.engine.d.ts +7 -5
  48. package/dist/lib/engines/template/pug.engine.js +11 -20
  49. package/dist/lib/engines/template/pug.engine.js.map +1 -1
  50. package/dist/lib/engines/template-engine.d.ts +4 -1
  51. package/dist/lib/engines/template-engine.js +2 -0
  52. package/dist/lib/engines/template-engine.js.map +1 -1
  53. package/dist/lib/entities/template-layout.entity.js +51 -14
  54. package/dist/lib/entities/template-layout.entity.js.map +1 -1
  55. package/dist/lib/entities/template.entity.js +58 -15
  56. package/dist/lib/entities/template.entity.js.map +1 -1
  57. package/dist/lib/errors/diagnose.d.ts +11 -0
  58. package/dist/lib/errors/diagnose.js +162 -0
  59. package/dist/lib/errors/diagnose.js.map +1 -0
  60. package/dist/lib/errors/template.errors.d.ts +77 -13
  61. package/dist/lib/errors/template.errors.js +104 -59
  62. package/dist/lib/errors/template.errors.js.map +1 -1
  63. package/dist/lib/interfaces/module-config.interface.d.ts +29 -18
  64. package/dist/lib/nest-dynamic-templates.module.d.ts +1 -4
  65. package/dist/lib/nest-dynamic-templates.module.js +40 -96
  66. package/dist/lib/nest-dynamic-templates.module.js.map +1 -1
  67. package/dist/lib/services/template-config.service.d.ts +12 -15
  68. package/dist/lib/services/template-config.service.js +30 -45
  69. package/dist/lib/services/template-config.service.js.map +1 -1
  70. package/dist/lib/services/template-engine.registry.d.ts +6 -10
  71. package/dist/lib/services/template-engine.registry.js +42 -50
  72. package/dist/lib/services/template-engine.registry.js.map +1 -1
  73. package/dist/lib/services/template-layout.service.d.ts +1 -3
  74. package/dist/lib/services/template-layout.service.js +80 -152
  75. package/dist/lib/services/template-layout.service.js.map +1 -1
  76. package/dist/lib/services/template.service.d.ts +1 -3
  77. package/dist/lib/services/template.service.js +107 -209
  78. package/dist/lib/services/template.service.js.map +1 -1
  79. package/dist/tsconfig.build.tsbuildinfo +1 -1
  80. package/package.json +17 -20
@@ -3,38 +3,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MjmlEngine = void 0;
4
4
  const template_types_1 = require("../../interfaces/template.types");
5
5
  const language_engine_1 = require("../language-engine");
6
+ const load_peer_1 = require("../load-peer");
6
7
  class MjmlEngine extends language_engine_1.LanguageEngine {
8
+ options;
7
9
  static engineName = template_types_1.TemplateLanguageEnum.MJML;
8
- options = {};
10
+ static displayName = 'MJML';
11
+ static peerPackage = 'mjml';
9
12
  constructor(options = {}) {
10
13
  super();
11
14
  this.options = options;
12
15
  }
13
16
  async render(content) {
14
- try {
15
- const mjml2html = (await import('mjml')).default;
16
- const result = mjml2html(content, {
17
- ...this.options,
18
- validationLevel: 'strict',
19
- });
20
- if (result.errors && result.errors.length > 0) {
21
- throw new Error(`MJML validation errors: ${result.errors.join(', ')}`);
22
- }
23
- return result.html;
24
- }
25
- catch (error) {
26
- throw new Error(`MJML rendering error: ${error?.message || 'Unknown error'}`);
17
+ const mod = await (0, load_peer_1.loadPeer)('mjml', 'mjml', 'language');
18
+ const mjml2html = mod.default ?? mod;
19
+ const result = mjml2html(content, { validationLevel: 'soft', ...this.options });
20
+ if (result.errors && result.errors.length > 0) {
21
+ const message = result.errors
22
+ .map((e) => e?.formattedMessage || e?.message || String(e))
23
+ .join('; ');
24
+ throw new Error(`MJML: ${message}`);
27
25
  }
26
+ return result.html;
28
27
  }
29
28
  async validate(content) {
30
29
  try {
31
- const mjml2html = (await import('mjml')).default;
32
- const result = mjml2html(content, {
33
- validationLevel: 'strict',
34
- });
35
- return result.errors.length === 0;
30
+ const mod = await (0, load_peer_1.loadPeer)('mjml', 'mjml', 'language');
31
+ const mjml2html = mod.default ?? mod;
32
+ const result = mjml2html(content, { validationLevel: 'soft', ...this.options });
33
+ return !result.errors || result.errors.length === 0;
36
34
  }
37
- catch (error) {
35
+ catch {
38
36
  return false;
39
37
  }
40
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mjml.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/language/mjml.engine.ts"],"names":[],"mappings":";;;AAAA,oEAAuE;AACvE,wDAAoD;AAEpD,MAAa,UAAW,SAAQ,gCAAc;IAE1C,MAAM,CAAU,UAAU,GAAG,qCAAoB,CAAC,IAAI,CAAC;IAEtC,OAAO,GAAQ,EAAE,CAAC;IAEnC,YAAY,UAAe,EAAE;QACzB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QACxB,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE;gBAC9B,GAAG,IAAI,CAAC,OAAO;gBACf,eAAe,EAAE,QAAQ;aAC5B,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;YAED,OAAO,MAAM,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QAClF,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE;gBAC9B,eAAe,EAAE,QAAQ;aAC5B,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AAvCL,gCAwCC"}
1
+ {"version":3,"file":"mjml.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/language/mjml.engine.ts"],"names":[],"mappings":";;;AAAA,oEAAuE;AACvE,wDAAoD;AACpD,4CAAwC;AAExC,MAAa,UAAW,SAAQ,gCAAc;IAKb;IAJ7B,MAAM,CAAU,UAAU,GAAG,qCAAoB,CAAC,IAAI,CAAC;IACvD,MAAM,CAAU,WAAW,GAAG,MAAM,CAAC;IACrC,MAAM,CAAU,WAAW,GAAG,MAAM,CAAC;IAErC,YAA6B,UAA+B,EAAE;QAC1D,KAAK,EAAE,CAAC;QADiB,YAAO,GAAP,OAAO,CAA0B;IAE9D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QACxB,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAQ,EAAM,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;QAIrC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAEhF,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM;iBACxB,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,gBAAgB,IAAI,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;iBAC/D,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAQ,EAAM,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;YACrC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AApCL,gCAqCC"}
@@ -2,6 +2,7 @@ import { TemplateLanguageEnum } from '../../interfaces/template.types';
2
2
  import { LanguageEngine } from '../language-engine';
3
3
  export declare class TextEngine extends LanguageEngine {
4
4
  static engineName: TemplateLanguageEnum;
5
+ static displayName: string;
5
6
  render(content: string): Promise<string>;
6
- validate(content: string): Promise<boolean>;
7
+ validate(): Promise<boolean>;
7
8
  }
@@ -5,10 +5,11 @@ const template_types_1 = require("../../interfaces/template.types");
5
5
  const language_engine_1 = require("../language-engine");
6
6
  class TextEngine extends language_engine_1.LanguageEngine {
7
7
  static engineName = template_types_1.TemplateLanguageEnum.TEXT;
8
+ static displayName = 'Text';
8
9
  async render(content) {
9
10
  return content;
10
11
  }
11
- async validate(content) {
12
+ async validate() {
12
13
  return true;
13
14
  }
14
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"text.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/language/text.engine.ts"],"names":[],"mappings":";;;AAAA,oEAAuE;AACvE,wDAAoD;AAEpD,MAAa,UAAW,SAAQ,gCAAc;IAE1C,MAAM,CAAU,UAAU,GAAG,qCAAoB,CAAC,IAAI,CAAC;IAEvD,KAAK,CAAC,MAAM,CAAC,OAAe;QACxB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;;AAVL,gCAWC"}
1
+ {"version":3,"file":"text.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/language/text.engine.ts"],"names":[],"mappings":";;;AAAA,oEAAuE;AACvE,wDAAoD;AAGpD,MAAa,UAAW,SAAQ,gCAAc;IAC1C,MAAM,CAAU,UAAU,GAAG,qCAAoB,CAAC,IAAI,CAAC;IACvD,MAAM,CAAU,WAAW,GAAG,MAAM,CAAC;IAErC,KAAK,CAAC,MAAM,CAAC,OAAe;QACxB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;;AAVL,gCAWC"}
@@ -1,5 +1,8 @@
1
+ import { TemplateLanguageEnum } from '../interfaces/template.types';
1
2
  export declare abstract class LanguageEngine {
2
- static engineName: string;
3
+ static engineName: TemplateLanguageEnum;
4
+ static displayName: string;
5
+ static peerPackage?: string;
3
6
  abstract render(content: string, data?: Record<string, any>): Promise<string>;
4
7
  abstract validate(content: string): Promise<boolean>;
5
8
  }
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LanguageEngine = void 0;
4
4
  class LanguageEngine {
5
5
  static engineName;
6
+ static displayName;
7
+ static peerPackage;
6
8
  }
7
9
  exports.LanguageEngine = LanguageEngine;
8
10
  //# sourceMappingURL=language-engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"language-engine.js","sourceRoot":"","sources":["../../../src/lib/engines/language-engine.ts"],"names":[],"mappings":";;;AACA,MAAsB,cAAc;IAEhC,MAAM,CAAC,UAAU,CAAS;CAO7B;AATD,wCASC"}
1
+ {"version":3,"file":"language-engine.js","sourceRoot":"","sources":["../../../src/lib/engines/language-engine.ts"],"names":[],"mappings":";;;AAOA,MAAsB,cAAc;IAEhC,MAAM,CAAC,UAAU,CAAuB;IAExC,MAAM,CAAC,WAAW,CAAS;IAE3B,MAAM,CAAC,WAAW,CAAU;CAK/B;AAXD,wCAWC"}
@@ -0,0 +1 @@
1
+ export declare function loadPeer<T = any>(pkg: string, engine: string, kind: 'template' | 'language'): Promise<T>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadPeer = loadPeer;
4
+ const template_errors_1 = require("../errors/template.errors");
5
+ async function loadPeer(pkg, engine, kind) {
6
+ try {
7
+ if (typeof require === 'function') {
8
+ return require(pkg);
9
+ }
10
+ return (await import(pkg));
11
+ }
12
+ catch {
13
+ throw new template_errors_1.TemplateEngineUnavailableError({
14
+ engine,
15
+ kind,
16
+ reason: 'not-installed',
17
+ peerPackage: pkg,
18
+ });
19
+ }
20
+ }
21
+ //# sourceMappingURL=load-peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-peer.js","sourceRoot":"","sources":["../../../src/lib/engines/load-peer.ts"],"names":[],"mappings":";;AAYA,4BAkBC;AA9BD,+DAA2E;AAYpE,KAAK,UAAU,QAAQ,CAC1B,GAAW,EACX,MAAc,EACd,IAA6B;IAE7B,IAAI,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC,GAAG,CAAM,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAM,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,gDAA8B,CAAC;YACrC,MAAM;YACN,IAAI;YACJ,MAAM,EAAE,eAAe;YACvB,WAAW,EAAE,GAAG;SACnB,CAAC,CAAC;IACP,CAAC;AACL,CAAC"}
@@ -1,10 +1,13 @@
1
1
  import { TemplateEngine } from '../template-engine';
2
2
  import { TemplateEngineEnum } from '../../interfaces/template.types';
3
- import { EngineOptions } from '../../interfaces/module-config.interface';
3
+ import { CustomEngineOptions } from '../../interfaces/module-config.interface';
4
4
  export declare class EjsEngine extends TemplateEngine {
5
+ private readonly options;
6
+ private readonly customOptions;
5
7
  static engineName: TemplateEngineEnum;
6
- private options;
7
- constructor(options?: EngineOptions<ejs.Options>);
8
+ static displayName: string;
9
+ static peerPackage: string;
10
+ constructor(options?: Record<string, any>, customOptions?: CustomEngineOptions);
8
11
  render(content: string, data?: Record<string, any>): Promise<string>;
9
12
  validate(content: string): Promise<boolean>;
10
13
  }
@@ -3,29 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EjsEngine = void 0;
4
4
  const template_engine_1 = require("../template-engine");
5
5
  const template_types_1 = require("../../interfaces/template.types");
6
+ const load_peer_1 = require("../load-peer");
6
7
  class EjsEngine extends template_engine_1.TemplateEngine {
7
- static engineName = template_types_1.TemplateEngineEnum.EJS;
8
8
  options;
9
- constructor(options) {
9
+ customOptions;
10
+ static engineName = template_types_1.TemplateEngineEnum.EJS;
11
+ static displayName = 'EJS';
12
+ static peerPackage = 'ejs';
13
+ constructor(options = {}, customOptions = {}) {
10
14
  super();
11
- this.options = options || {};
15
+ this.options = options;
16
+ this.customOptions = customOptions;
12
17
  }
13
18
  async render(content, data) {
14
- try {
15
- const ejs = await import('ejs');
16
- return ejs.render(content, data, this.options);
17
- }
18
- catch (error) {
19
- throw new Error(`Failed to render EJS template: ${error?.message || 'Unknown error'}`);
20
- }
19
+ const ejs = await (0, load_peer_1.loadPeer)('ejs', 'ejs', 'template');
20
+ const locals = { ...this.customOptions.globals, ...this.customOptions.filters, ...data };
21
+ return ejs.render(content, locals, this.options);
21
22
  }
22
23
  async validate(content) {
23
24
  try {
24
- const ejs = await import('ejs');
25
+ const ejs = await (0, load_peer_1.loadPeer)('ejs', 'ejs', 'template');
25
26
  ejs.compile(content, this.options);
26
27
  return true;
27
28
  }
28
- catch (error) {
29
+ catch {
29
30
  return false;
30
31
  }
31
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ejs.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/template/ejs.engine.ts"],"names":[],"mappings":";;;AAAA,wDAAoD;AACpD,oEAAqE;AAErE,MAAa,SAAU,SAAQ,gCAAc;IAEzC,MAAM,CAAU,UAAU,GAAG,mCAAkB,CAAC,GAAG,CAAC;IAE5C,OAAO,CAAc;IAE7B,YAAY,OAAoC;QAC5C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAA0B;QACpD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QAC3F,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AA5BL,8BA6BC"}
1
+ {"version":3,"file":"ejs.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/template/ejs.engine.ts"],"names":[],"mappings":";;;AAAA,wDAAoD;AACpD,oEAAqE;AAErE,4CAAwC;AAExC,MAAa,SAAU,SAAQ,gCAAc;IAMpB;IACA;IANrB,MAAM,CAAU,UAAU,GAAG,mCAAkB,CAAC,GAAG,CAAC;IACpD,MAAM,CAAU,WAAW,GAAG,KAAK,CAAC;IACpC,MAAM,CAAU,WAAW,GAAG,KAAK,CAAC;IAEpC,YACqB,UAA+B,EAAE,EACjC,gBAAqC,EAAE;QAExD,KAAK,EAAE,CAAC;QAHS,YAAO,GAAP,OAAO,CAA0B;QACjC,kBAAa,GAAb,aAAa,CAA0B;IAG5D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAA0B;QACpD,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAQ,EAAuB,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAE3E,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;QACzF,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAQ,EAAuB,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAC3E,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AA3BL,8BA4BC"}
@@ -1,10 +1,15 @@
1
1
  import { TemplateEngineEnum } from '../../interfaces/template.types';
2
2
  import { TemplateEngine } from '../template-engine';
3
- import { EngineOptions } from '../../interfaces/module-config.interface';
3
+ import { CustomEngineOptions } from '../../interfaces/module-config.interface';
4
4
  export declare class HandlebarsEngine extends TemplateEngine {
5
+ private readonly options;
6
+ private readonly customOptions;
5
7
  static engineName: TemplateEngineEnum;
6
- private options;
7
- constructor(options?: EngineOptions<Handlebars.ParseOptions>);
8
+ static displayName: string;
9
+ static peerPackage: string;
10
+ private instance?;
11
+ constructor(options?: Record<string, any>, customOptions?: CustomEngineOptions);
12
+ private getInstance;
8
13
  render(content: string, data?: Record<string, any>): Promise<string>;
9
14
  validate(content: string): Promise<boolean>;
10
15
  }
@@ -3,30 +3,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HandlebarsEngine = void 0;
4
4
  const template_types_1 = require("../../interfaces/template.types");
5
5
  const template_engine_1 = require("../template-engine");
6
+ const load_peer_1 = require("../load-peer");
6
7
  class HandlebarsEngine extends template_engine_1.TemplateEngine {
7
- static engineName = template_types_1.TemplateEngineEnum.HANDLEBARS;
8
8
  options;
9
- constructor(options) {
9
+ customOptions;
10
+ static engineName = template_types_1.TemplateEngineEnum.HANDLEBARS;
11
+ static displayName = 'Handlebars';
12
+ static peerPackage = 'handlebars';
13
+ instance;
14
+ constructor(options = {}, customOptions = {}) {
10
15
  super();
11
- this.options = options || {};
16
+ this.options = options;
17
+ this.customOptions = customOptions;
12
18
  }
13
- async render(content, data) {
14
- try {
15
- const Handlebars = await import('handlebars');
16
- const template = Handlebars.compile(content, this.options);
17
- return template(data);
18
- }
19
- catch (error) {
20
- throw new Error(`Failed to render Handlebars template: ${error?.message || 'Unknown error'}`);
19
+ async getInstance() {
20
+ if (this.instance)
21
+ return this.instance;
22
+ const mod = await (0, load_peer_1.loadPeer)('handlebars', 'hbs', 'template');
23
+ const Handlebars = mod.default ?? mod;
24
+ const instance = typeof Handlebars.create === 'function' ? Handlebars.create() : Handlebars;
25
+ for (const [name, fn] of Object.entries(this.customOptions.filters ?? {})) {
26
+ instance.registerHelper(name, fn);
21
27
  }
28
+ this.instance = instance;
29
+ return instance;
30
+ }
31
+ async render(content, data) {
32
+ const Handlebars = await this.getInstance();
33
+ const template = Handlebars.compile(content, this.options);
34
+ return template({ ...this.customOptions.globals, ...data });
22
35
  }
23
36
  async validate(content) {
24
37
  try {
25
- const Handlebars = await import('handlebars');
38
+ const Handlebars = await this.getInstance();
26
39
  Handlebars.precompile(content, this.options);
27
40
  return true;
28
41
  }
29
- catch (error) {
42
+ catch {
30
43
  return false;
31
44
  }
32
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handlebars.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/template/handlebars.engine.ts"],"names":[],"mappings":";;;AAAA,oEAAqE;AACrE,wDAAoD;AAGpD,MAAa,gBAAiB,SAAQ,gCAAc;IAEhD,MAAM,CAAU,UAAU,GAAG,mCAAkB,CAAC,UAAU,CAAC;IAEnD,OAAO,CAA0B;IAEzC,YAAY,OAAgD;QACxD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAA0B;QACpD,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QAClG,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9C,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AA7BL,4CA8BC"}
1
+ {"version":3,"file":"handlebars.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/template/handlebars.engine.ts"],"names":[],"mappings":";;;AAAA,oEAAqE;AACrE,wDAAoD;AAEpD,4CAAwC;AAExC,MAAa,gBAAiB,SAAQ,gCAAc;IAQ3B;IACA;IARrB,MAAM,CAAU,UAAU,GAAG,mCAAkB,CAAC,UAAU,CAAC;IAC3D,MAAM,CAAU,WAAW,GAAG,YAAY,CAAC;IAC3C,MAAM,CAAU,WAAW,GAAG,YAAY,CAAC;IAEnC,QAAQ,CAAO;IAEvB,YACqB,UAA+B,EAAE,EACjC,gBAAqC,EAAE;QAExD,KAAK,EAAE,CAAC;QAHS,YAAO,GAAP,OAAO,CAA0B;QACjC,kBAAa,GAAb,aAAa,CAA0B;IAG5D,CAAC;IAGO,KAAK,CAAC,WAAW;QACrB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QAExC,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAQ,EAAM,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QAE5F,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAA0B;QACpD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5C,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AA5CL,4CA6CC"}
@@ -1,16 +1,16 @@
1
1
  import { TemplateEngineEnum } from '../../interfaces/template.types';
2
2
  import { TemplateEngine } from '../template-engine';
3
3
  import type { ConfigureOptions } from 'nunjucks';
4
- import { CustomEngineOptions, EngineOptions } from '../../interfaces/module-config.interface';
4
+ import { CustomEngineOptions } from '../../interfaces/module-config.interface';
5
5
  export declare class NunjucksEngine extends TemplateEngine {
6
- private options?;
7
- private customOptions?;
6
+ private readonly options;
7
+ private readonly customOptions;
8
8
  static engineName: TemplateEngineEnum;
9
- private env;
10
- constructor(options?: EngineOptions<ConfigureOptions>, customOptions?: CustomEngineOptions);
11
- initNunjucks(): void;
9
+ static displayName: string;
10
+ static peerPackage: string;
11
+ private env?;
12
+ constructor(options?: ConfigureOptions, customOptions?: CustomEngineOptions);
13
+ private getEnv;
12
14
  render(content: string, data?: Record<string, any>): Promise<string>;
13
15
  validate(content: string): Promise<boolean>;
14
- registerFilter(name: string, filter: (...args: any[]) => any): void;
15
- registerGlobal(name: string, global: any): void;
16
16
  }
@@ -1,71 +1,59 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NunjucksEngine = void 0;
4
- const lodash_1 = require("lodash");
5
4
  const template_types_1 = require("../../interfaces/template.types");
6
5
  const template_engine_1 = require("../template-engine");
6
+ const load_peer_1 = require("../load-peer");
7
7
  class NunjucksEngine extends template_engine_1.TemplateEngine {
8
8
  options;
9
9
  customOptions;
10
10
  static engineName = template_types_1.TemplateEngineEnum.NUNJUCKS;
11
+ static displayName = 'Nunjucks';
12
+ static peerPackage = 'nunjucks';
11
13
  env;
12
- constructor(options, customOptions) {
14
+ constructor(options = {}, customOptions = {}) {
13
15
  super();
14
16
  this.options = options;
15
17
  this.customOptions = customOptions;
16
- this.initNunjucks();
17
18
  }
18
- initNunjucks() {
19
- const nunjucks = require('nunjucks');
20
- const nunjucksOptions = (0, lodash_1.omit)(this.options, 'filters');
21
- this.env = nunjucks.configure({
19
+ async getEnv() {
20
+ if (this.env)
21
+ return this.env;
22
+ const nunjucks = await (0, load_peer_1.loadPeer)('nunjucks', 'njk', 'template');
23
+ const env = nunjucks.configure({
22
24
  autoescape: true,
23
25
  throwOnUndefined: true,
24
- ...nunjucksOptions,
26
+ ...this.options,
25
27
  });
26
- if (this.customOptions?.filters) {
27
- Object.entries(this.customOptions.filters).forEach(([name, filter]) => {
28
- this.registerFilter(name, filter);
29
- });
28
+ for (const [name, filter] of Object.entries(this.customOptions.filters ?? {})) {
29
+ env.addFilter(name, filter);
30
30
  }
31
- if (this.customOptions?.globalValues) {
32
- Object.entries(this.customOptions.globalValues).forEach(([name, value]) => {
33
- this.registerGlobal(name, value);
34
- });
31
+ for (const [name, value] of Object.entries(this.customOptions.globals ?? {})) {
32
+ env.addGlobal(name, value);
35
33
  }
34
+ this.env = env;
35
+ return env;
36
36
  }
37
37
  async render(content, data) {
38
- try {
39
- return new Promise((resolve, reject) => {
40
- this.env.renderString(content, data || {}, (err, result) => {
41
- if (err) {
42
- reject(err);
43
- }
44
- else {
45
- resolve(result);
46
- }
47
- });
38
+ const env = await this.getEnv();
39
+ return new Promise((resolve, reject) => {
40
+ env.renderString(content, data || {}, (err, result) => {
41
+ if (err)
42
+ reject(err);
43
+ else
44
+ resolve(result ?? '');
48
45
  });
49
- }
50
- catch (error) {
51
- throw new Error(`Failed to render Nunjucks template: ${error?.message || 'Unknown error'}`);
52
- }
46
+ });
53
47
  }
54
48
  async validate(content) {
55
49
  try {
56
50
  await this.render(content, {});
57
51
  return true;
58
52
  }
59
- catch (error) {
53
+ catch {
60
54
  return false;
61
55
  }
62
56
  }
63
- registerFilter(name, filter) {
64
- this.env.addFilter(name, filter);
65
- }
66
- registerGlobal(name, global) {
67
- this.env.addGlobal(name, global);
68
- }
69
57
  }
70
58
  exports.NunjucksEngine = NunjucksEngine;
71
59
  //# sourceMappingURL=nunjucks.engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nunjucks.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/template/nunjucks.engine.ts"],"names":[],"mappings":";;;AAAA,mCAA8B;AAC9B,oEAAqE;AACrE,wDAAoD;AAIpD,MAAa,cAAe,SAAQ,gCAAc;IAM1B;IAAmD;IAJvE,MAAM,CAAU,UAAU,GAAG,mCAAkB,CAAC,QAAQ,CAAC;IAEjD,GAAG,CAAc;IAEzB,YAAoB,OAAyC,EAAU,aAAmC;QACtG,KAAK,EAAE,CAAC;QADQ,YAAO,GAAP,OAAO,CAAkC;QAAU,kBAAa,GAAb,aAAa,CAAsB;QAEtG,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,YAAY;QACR,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAErC,MAAM,eAAe,GAAG,IAAA,aAAI,EAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEtD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;YAC1B,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,IAAI;YACtB,GAAG,eAAe;SACrB,CAAC,CAAC;QAGH,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;gBAClE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC;QAGD,IAAI,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;gBACtE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAA0B;QACpD,IAAI,CAAC;YACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,GAAQ,EAAE,MAAW,EAAE,EAAE;oBACjE,IAAI,GAAG,EAAE,CAAC;wBACN,MAAM,CAAC,GAAG,CAAC,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACJ,OAAO,CAAC,MAAM,CAAC,CAAC;oBACpB,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QAChG,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YAED,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,MAA+B;QACxD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,MAAW;QACpC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;;AArEL,wCAsEC"}
1
+ {"version":3,"file":"nunjucks.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/template/nunjucks.engine.ts"],"names":[],"mappings":";;;AAAA,oEAAqE;AACrE,wDAAoD;AAGpD,4CAAwC;AAExC,MAAa,cAAe,SAAQ,gCAAc;IAQzB;IACA;IARrB,MAAM,CAAU,UAAU,GAAG,mCAAkB,CAAC,QAAQ,CAAC;IACzD,MAAM,CAAU,WAAW,GAAG,UAAU,CAAC;IACzC,MAAM,CAAU,WAAW,GAAG,UAAU,CAAC;IAEjC,GAAG,CAAe;IAE1B,YACqB,UAA4B,EAAE,EAC9B,gBAAqC,EAAE;QAExD,KAAK,EAAE,CAAC;QAHS,YAAO,GAAP,OAAO,CAAuB;QAC9B,kBAAa,GAAb,aAAa,CAA0B;IAG5D,CAAC;IAGO,KAAK,CAAC,MAAM;QAChB,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC;QAE9B,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAQ,EAA4B,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1F,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;YAC3B,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,IAAI;YACtB,GAAG,IAAI,CAAC,OAAO;SAClB,CAAC,CAAC;QAEH,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,MAAa,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,OAAO,GAAG,CAAC;IACf,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAA0B;QACpD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEhC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBAClD,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAChB,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AAtDL,wCAuDC"}
@@ -1,12 +1,14 @@
1
1
  import type { Options } from 'pug';
2
2
  import { TemplateEngineEnum } from '../../interfaces/template.types';
3
3
  import { TemplateEngine } from '../template-engine';
4
- import { CustomEngineOptions, EngineOptions } from '../../interfaces/module-config.interface';
4
+ import { CustomEngineOptions } from '../../interfaces/module-config.interface';
5
5
  export declare class PugEngine extends TemplateEngine {
6
- private customOptions?;
6
+ private readonly options;
7
+ private readonly customOptions;
7
8
  static engineName: TemplateEngineEnum;
8
- private options;
9
- constructor(options?: EngineOptions<Options>, customOptions?: CustomEngineOptions);
10
- render(content: string, data: any): Promise<string>;
9
+ static displayName: string;
10
+ static peerPackage: string;
11
+ constructor(options?: Options, customOptions?: CustomEngineOptions);
12
+ render(content: string, data?: Record<string, any>): Promise<string>;
11
13
  validate(content: string): Promise<boolean>;
12
14
  }
@@ -3,39 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PugEngine = void 0;
4
4
  const template_types_1 = require("../../interfaces/template.types");
5
5
  const template_engine_1 = require("../template-engine");
6
+ const load_peer_1 = require("../load-peer");
6
7
  class PugEngine extends template_engine_1.TemplateEngine {
8
+ options;
7
9
  customOptions;
8
10
  static engineName = template_types_1.TemplateEngineEnum.PUG;
9
- options;
10
- constructor(options, customOptions) {
11
+ static displayName = 'Pug';
12
+ static peerPackage = 'pug';
13
+ constructor(options = {}, customOptions = {}) {
11
14
  super();
15
+ this.options = options;
12
16
  this.customOptions = customOptions;
13
- this.options = options || {};
14
17
  }
15
18
  async render(content, data) {
16
- try {
17
- const pug = await import('pug');
18
- const template = pug.compile(content, {
19
- ...this.options,
20
- filters: this.customOptions?.filters
21
- });
22
- return template({
23
- ...this.options.filters,
24
- ...data,
25
- ...this.customOptions?.filters
26
- });
27
- }
28
- catch (error) {
29
- throw new Error(`Failed to render Pug template: ${error?.message || 'Unknown error'}`);
30
- }
19
+ const pug = await (0, load_peer_1.loadPeer)('pug', 'pug', 'template');
20
+ const template = pug.compile(content, this.options);
21
+ return template({ ...this.customOptions.globals, ...this.customOptions.filters, ...data });
31
22
  }
32
23
  async validate(content) {
33
24
  try {
34
- const pug = await import('pug');
25
+ const pug = await (0, load_peer_1.loadPeer)('pug', 'pug', 'template');
35
26
  pug.compile(content, this.options);
36
27
  return true;
37
28
  }
38
- catch (error) {
29
+ catch {
39
30
  return false;
40
31
  }
41
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pug.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/template/pug.engine.ts"],"names":[],"mappings":";;;AACA,oEAAqE;AACrE,wDAAoD;AAGpD,MAAa,SAAU,SAAQ,gCAAc;IAMa;IAJtD,MAAM,CAAU,UAAU,GAAG,mCAAkB,CAAC,GAAG,CAAC;IAE5C,OAAO,CAAU;IAEzB,YAAY,OAAgC,EAAU,aAAmC;QACrF,KAAK,EAAE,CAAC;QAD0C,kBAAa,GAAb,aAAa,CAAsB;QAErF,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAAS;QACnC,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE;gBAClC,GAAG,IAAI,CAAC,OAAO;gBACf,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO;aACvC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;gBACZ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;gBACvB,GAAG,IAAI;gBACP,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO;aACjC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QAC3F,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AApCL,8BAqCC"}
1
+ {"version":3,"file":"pug.engine.js","sourceRoot":"","sources":["../../../../src/lib/engines/template/pug.engine.ts"],"names":[],"mappings":";;;AACA,oEAAqE;AACrE,wDAAoD;AAEpD,4CAAwC;AAExC,MAAa,SAAU,SAAQ,gCAAc;IAMpB;IACA;IANrB,MAAM,CAAU,UAAU,GAAG,mCAAkB,CAAC,GAAG,CAAC;IACpD,MAAM,CAAU,WAAW,GAAG,KAAK,CAAC;IACpC,MAAM,CAAU,WAAW,GAAG,KAAK,CAAC;IAEpC,YACqB,UAAmB,EAAE,EACrB,gBAAqC,EAAE;QAExD,KAAK,EAAE,CAAC;QAHS,YAAO,GAAP,OAAO,CAAc;QACrB,kBAAa,GAAb,aAAa,CAA0B;IAG5D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAA0B;QACpD,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAQ,EAAuB,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpD,OAAO,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC1B,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAQ,EAAuB,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAC3E,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;;AA3BL,8BA4BC"}
@@ -1,5 +1,8 @@
1
+ import { TemplateEngineEnum } from '../interfaces/template.types';
1
2
  export declare abstract class TemplateEngine {
2
- static engineName: string;
3
+ static engineName: TemplateEngineEnum;
4
+ static displayName: string;
5
+ static peerPackage: string;
3
6
  abstract render(content: string, data?: Record<string, any>): Promise<string>;
4
7
  abstract validate(content: string): Promise<boolean>;
5
8
  }
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TemplateEngine = void 0;
4
4
  class TemplateEngine {
5
5
  static engineName;
6
+ static displayName;
7
+ static peerPackage;
6
8
  }
7
9
  exports.TemplateEngine = TemplateEngine;
8
10
  //# sourceMappingURL=template-engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../../../src/lib/engines/template-engine.ts"],"names":[],"mappings":";;;AACA,MAAsB,cAAc;IAEhC,MAAM,CAAC,UAAU,CAAS;CAM7B;AARD,wCAQC"}
1
+ {"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../../../src/lib/engines/template-engine.ts"],"names":[],"mappings":";;;AAWA,MAAsB,cAAc;IAEhC,MAAM,CAAC,UAAU,CAAqB;IAEtC,MAAM,CAAC,WAAW,CAAS;IAE3B,MAAM,CAAC,WAAW,CAAS;CAK9B;AAXD,wCAWC"}