takomo 5.5.0 → 5.6.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 (97) hide show
  1. package/README.md +0 -1
  2. package/dist/config/project-config.d.ts +2 -0
  3. package/dist/config/project-config.js.map +1 -1
  4. package/dist/constants/regions-constants.js +1 -0
  5. package/dist/constants/regions-constants.js.map +1 -1
  6. package/dist/context/stacks-context.d.ts +1 -1
  7. package/dist/extensions/config-customizer.d.ts +5 -0
  8. package/dist/index.d.ts +2 -1
  9. package/dist/index.js +3 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/parser/project-config-parser.js +3 -0
  12. package/dist/parser/project-config-parser.js.map +1 -1
  13. package/dist/takomo-cli/common.d.ts +1 -1
  14. package/dist/takomo-cli/common.js +2 -2
  15. package/dist/takomo-cli/common.js.map +1 -1
  16. package/dist/takomo-cli/deployment-targets/common-deploy.d.ts +1 -1
  17. package/dist/takomo-cli/deployment-targets/common-deploy.js +2 -2
  18. package/dist/takomo-cli/deployment-targets/common-deploy.js.map +1 -1
  19. package/dist/takomo-cli/deployment-targets/common.js +2 -2
  20. package/dist/takomo-cli/deployment-targets/common.js.map +1 -1
  21. package/dist/takomo-cli/deployment-targets/run.js +2 -2
  22. package/dist/takomo-cli/deployment-targets/run.js.map +1 -1
  23. package/dist/takomo-cli/deployment-targets/show-config.js +2 -2
  24. package/dist/takomo-cli/deployment-targets/show-config.js.map +1 -1
  25. package/dist/takomo-cli/deployment-targets/validate-config.js +2 -2
  26. package/dist/takomo-cli/deployment-targets/validate-config.js.map +1 -1
  27. package/dist/takomo-cli/init.js +2 -2
  28. package/dist/takomo-cli/init.js.map +1 -1
  29. package/dist/takomo-cli/stacks/deploy.js +2 -2
  30. package/dist/takomo-cli/stacks/deploy.js.map +1 -1
  31. package/dist/takomo-cli/stacks/detect-drift.js +2 -2
  32. package/dist/takomo-cli/stacks/detect-drift.js.map +1 -1
  33. package/dist/takomo-cli/stacks/inspect/configuration.js +2 -2
  34. package/dist/takomo-cli/stacks/inspect/configuration.js.map +1 -1
  35. package/dist/takomo-cli/stacks/inspect/dependency-graph.js +2 -2
  36. package/dist/takomo-cli/stacks/inspect/dependency-graph.js.map +1 -1
  37. package/dist/takomo-cli/stacks/list.js +2 -2
  38. package/dist/takomo-cli/stacks/list.js.map +1 -1
  39. package/dist/takomo-cli/stacks/prune.js +2 -2
  40. package/dist/takomo-cli/stacks/prune.js.map +1 -1
  41. package/dist/takomo-cli/stacks/undeploy.js +2 -2
  42. package/dist/takomo-cli/stacks/undeploy.js.map +1 -1
  43. package/dist/takomo-config-repository-fs/deployment-targets/config-repository.js.map +1 -1
  44. package/dist/takomo-config-repository-fs/deployment-targets/parser.d.ts +1 -1
  45. package/dist/takomo-config-repository-fs/deployment-targets/parser.js +5 -16
  46. package/dist/takomo-config-repository-fs/deployment-targets/parser.js.map +1 -1
  47. package/dist/takomo-config-repository-fs/stacks/config-repository.d.ts +1 -1
  48. package/dist/takomo-config-repository-fs/stacks/config-repository.js +50 -60
  49. package/dist/takomo-config-repository-fs/stacks/config-repository.js.map +1 -1
  50. package/dist/takomo-config-repository-fs/stacks/config-tree.d.ts +1 -1
  51. package/dist/takomo-config-repository-fs/stacks/parser.d.ts +1 -1
  52. package/dist/takomo-config-repository-fs/stacks/parser.js +8 -28
  53. package/dist/takomo-config-repository-fs/stacks/parser.js.map +1 -1
  54. package/dist/takomo-core/command.d.ts +0 -4
  55. package/dist/takomo-core/command.js +1 -6
  56. package/dist/takomo-core/command.js.map +1 -1
  57. package/dist/takomo-deployment-targets-repository/deployment-target-repository.d.ts +1 -1
  58. package/dist/takomo-deployment-targets-repository/filesystem-deployment-target-repository.js +4 -3
  59. package/dist/takomo-deployment-targets-repository/filesystem-deployment-target-repository.js.map +1 -1
  60. package/dist/takomo-stacks-context/model.d.ts +1 -1
  61. package/dist/takomo-stacks-context/model.js.map +1 -1
  62. package/dist/templating/ejs/ejs-template-engine-provider.d.ts +12 -0
  63. package/dist/templating/ejs/ejs-template-engine-provider.js +31 -0
  64. package/dist/templating/ejs/ejs-template-engine-provider.js.map +1 -0
  65. package/dist/templating/ejs/ejs-template-engine.d.ts +14 -0
  66. package/dist/templating/ejs/ejs-template-engine.js +58 -0
  67. package/dist/templating/ejs/ejs-template-engine.js.map +1 -0
  68. package/dist/templating/handlebars/handlebars-template-engine-provider.d.ts +17 -0
  69. package/dist/templating/handlebars/handlebars-template-engine-provider.js +68 -0
  70. package/dist/templating/handlebars/handlebars-template-engine-provider.js.map +1 -0
  71. package/dist/templating/handlebars/handlebars-template-engine.d.ts +20 -0
  72. package/dist/templating/handlebars/handlebars-template-engine.js +96 -0
  73. package/dist/templating/handlebars/handlebars-template-engine.js.map +1 -0
  74. package/dist/templating/handlebars/load-handlebars-helpers.d.ts +4 -0
  75. package/dist/{takomo-config-repository-fs/template-engine.js → templating/handlebars/load-handlebars-helpers.js} +6 -25
  76. package/dist/templating/handlebars/load-handlebars-helpers.js.map +1 -0
  77. package/dist/templating/handlebars/load-handlebars-partials.d.ts +4 -0
  78. package/dist/templating/handlebars/load-handlebars-partials.js +27 -0
  79. package/dist/templating/handlebars/load-handlebars-partials.js.map +1 -0
  80. package/dist/templating/handlebars/utils.d.ts +3 -0
  81. package/dist/templating/handlebars/utils.js +16 -0
  82. package/dist/templating/handlebars/utils.js.map +1 -0
  83. package/dist/templating/template-engine-provider.d.ts +13 -0
  84. package/dist/templating/template-engine-provider.js +3 -0
  85. package/dist/templating/template-engine-provider.js.map +1 -0
  86. package/dist/templating/template-engine.d.ts +34 -0
  87. package/dist/templating/template-engine.js +3 -0
  88. package/dist/templating/template-engine.js.map +1 -0
  89. package/dist/utils/templating.d.ts +0 -14
  90. package/dist/utils/templating.js +1 -55
  91. package/dist/utils/templating.js.map +1 -1
  92. package/package.json +4 -2
  93. package/dist/takomo-config-repository-fs/index.d.ts +0 -4
  94. package/dist/takomo-config-repository-fs/index.js +0 -12
  95. package/dist/takomo-config-repository-fs/index.js.map +0 -1
  96. package/dist/takomo-config-repository-fs/template-engine.d.ts +0 -5
  97. package/dist/takomo-config-repository-fs/template-engine.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _EjsTemplateEngineProvider_logger;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.EjsTemplateEngineProvider = void 0;
16
+ const ejs_template_engine_1 = require("./ejs-template-engine");
17
+ class EjsTemplateEngineProvider {
18
+ constructor({ logger }) {
19
+ _EjsTemplateEngineProvider_logger.set(this, void 0);
20
+ __classPrivateFieldSet(this, _EjsTemplateEngineProvider_logger, logger, "f");
21
+ }
22
+ async init({ projectDir }) {
23
+ return new ejs_template_engine_1.EjsTemplateEngine({
24
+ projectDir,
25
+ logger: __classPrivateFieldGet(this, _EjsTemplateEngineProvider_logger, "f"),
26
+ });
27
+ }
28
+ }
29
+ exports.EjsTemplateEngineProvider = EjsTemplateEngineProvider;
30
+ _EjsTemplateEngineProvider_logger = new WeakMap();
31
+ //# sourceMappingURL=ejs-template-engine-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ejs-template-engine-provider.js","sourceRoot":"","sources":["../../../src/templating/ejs/ejs-template-engine-provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAMA,+DAAyD;AAMzD,MAAa,yBAAyB;IAEpC,YAAY,EAAE,MAAM,EAAkC;QADtD,oDAA2B;QAEzB,uBAAA,IAAI,qCAAW,MAAM,MAAA,CAAA;IACvB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAuB;QAC5C,OAAO,IAAI,uCAAiB,CAAC;YAC3B,UAAU;YACV,MAAM,EAAE,uBAAA,IAAI,yCAAQ;SACrB,CAAC,CAAA;IACJ,CAAC;CACF;AAXD,8DAWC"}
@@ -0,0 +1,14 @@
1
+ import { FilePath } from "../../utils/files";
2
+ import { TkmLogger } from "../../utils/logging";
3
+ import { RenderTemplateFileProps, RenderTemplateProps, TemplateEngine } from "../template-engine";
4
+ interface EjsTemplateEngineProps {
5
+ readonly projectDir: FilePath;
6
+ readonly logger: TkmLogger;
7
+ }
8
+ export declare class EjsTemplateEngine implements TemplateEngine {
9
+ #private;
10
+ constructor({ projectDir, logger }: EjsTemplateEngineProps);
11
+ renderTemplate({ templateString, variables, }: RenderTemplateProps): Promise<string>;
12
+ renderTemplateFile({ pathToFile, variables, }: RenderTemplateFileProps): Promise<string>;
13
+ }
14
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ var _EjsTemplateEngine_logger, _EjsTemplateEngine_projectDir;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.EjsTemplateEngine = void 0;
19
+ const ejs_1 = __importDefault(require("ejs"));
20
+ const files_1 = require("../../utils/files");
21
+ class EjsTemplateEngine {
22
+ constructor({ projectDir, logger }) {
23
+ _EjsTemplateEngine_logger.set(this, void 0);
24
+ _EjsTemplateEngine_projectDir.set(this, void 0);
25
+ __classPrivateFieldSet(this, _EjsTemplateEngine_logger, logger, "f");
26
+ __classPrivateFieldSet(this, _EjsTemplateEngine_projectDir, projectDir, "f");
27
+ // Ejs.configure({
28
+ // autoEscape: false,
29
+ // cache: false,
30
+ // rmWhitespace: false,
31
+ // views: projectDir,
32
+ // autoTrim: false,
33
+ // })
34
+ }
35
+ async renderTemplate({ templateString, variables, }) {
36
+ __classPrivateFieldGet(this, _EjsTemplateEngine_logger, "f").traceText("Template body before rendering:", () => templateString);
37
+ __classPrivateFieldGet(this, _EjsTemplateEngine_logger, "f").traceObject("Render template with variables:", () => variables);
38
+ try {
39
+ const renderedTemplate = ejs_1.default.render(templateString, { it: variables }, {
40
+ rmWhitespace: false,
41
+ views: [__classPrivateFieldGet(this, _EjsTemplateEngine_projectDir, "f")],
42
+ });
43
+ __classPrivateFieldGet(this, _EjsTemplateEngine_logger, "f").traceText("Template body after rendering:", () => renderedTemplate);
44
+ return renderedTemplate;
45
+ }
46
+ catch (e) {
47
+ __classPrivateFieldGet(this, _EjsTemplateEngine_logger, "f").error("An error occurred while rendering template");
48
+ throw e;
49
+ }
50
+ }
51
+ async renderTemplateFile({ pathToFile, variables, }) {
52
+ const templateString = await (0, files_1.readFileContents)(pathToFile);
53
+ return this.renderTemplate({ templateString, variables });
54
+ }
55
+ }
56
+ exports.EjsTemplateEngine = EjsTemplateEngine;
57
+ _EjsTemplateEngine_logger = new WeakMap(), _EjsTemplateEngine_projectDir = new WeakMap();
58
+ //# sourceMappingURL=ejs-template-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ejs-template-engine.js","sourceRoot":"","sources":["../../../src/templating/ejs/ejs-template-engine.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,8CAAqB;AACrB,6CAA8D;AAa9D,MAAa,iBAAiB;IAI5B,YAAY,EAAE,UAAU,EAAE,MAAM,EAA0B;QAH1D,4CAA2B;QAC3B,gDAA8B;QAG5B,uBAAA,IAAI,6BAAW,MAAM,MAAA,CAAA;QACrB,uBAAA,IAAI,iCAAe,UAAU,MAAA,CAAA;QAC7B,kBAAkB;QAClB,uBAAuB;QACvB,kBAAkB;QAClB,yBAAyB;QACzB,uBAAuB;QACvB,qBAAqB;QACrB,KAAK;IACP,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EACnB,cAAc,EACd,SAAS,GACW;QACpB,uBAAA,IAAI,iCAAQ,CAAC,SAAS,CACpB,iCAAiC,EACjC,GAAG,EAAE,CAAC,cAAc,CACrB,CAAA;QAED,uBAAA,IAAI,iCAAQ,CAAC,WAAW,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAE5E,IAAI;YACF,MAAM,gBAAgB,GAAG,aAAG,CAAC,MAAM,CACjC,cAAc,EACd,EAAE,EAAE,EAAE,SAAS,EAAE,EACjB;gBACE,YAAY,EAAE,KAAK;gBACnB,KAAK,EAAE,CAAC,uBAAA,IAAI,qCAAY,CAAC;aAC1B,CACF,CAAA;YACD,uBAAA,IAAI,iCAAQ,CAAC,SAAS,CACpB,gCAAgC,EAChC,GAAG,EAAE,CAAC,gBAAgB,CACvB,CAAA;YAED,OAAO,gBAAgB,CAAA;SACxB;QAAC,OAAO,CAAC,EAAE;YACV,uBAAA,IAAI,iCAAQ,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAChE,MAAM,CAAC,CAAA;SACR;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EACvB,UAAU,EACV,SAAS,GACe;QACxB,MAAM,cAAc,GAAG,MAAM,IAAA,wBAAgB,EAAC,UAAU,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAA;IAC3D,CAAC;CACF;AAvDD,8CAuDC"}
@@ -0,0 +1,17 @@
1
+ import { InternalTakomoProjectConfig } from "../../config/project-config";
2
+ import { FilePath } from "../../utils/files";
3
+ import { TkmLogger } from "../../utils/logging";
4
+ import { TemplateEngine } from "../template-engine";
5
+ import { TemplateEngineProps, TemplateEngineProvider } from "../template-engine-provider";
6
+ interface HandlebarsTemplateEngineProviderProps {
7
+ readonly partialsDir: FilePath;
8
+ readonly helpersDir: FilePath;
9
+ readonly projectConfig: InternalTakomoProjectConfig;
10
+ readonly logger: TkmLogger;
11
+ }
12
+ export declare class HandlebarsTemplateEngineProvider implements TemplateEngineProvider {
13
+ #private;
14
+ constructor(props: HandlebarsTemplateEngineProviderProps);
15
+ init({ projectDir, logger, }: TemplateEngineProps): Promise<TemplateEngine>;
16
+ }
17
+ export {};
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _HandlebarsTemplateEngineProvider_partialsDir, _HandlebarsTemplateEngineProvider_helpersDir, _HandlebarsTemplateEngineProvider_projectConfig, _HandlebarsTemplateEngineProvider_logger;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.HandlebarsTemplateEngineProvider = void 0;
16
+ const errors_1 = require("../../utils/errors");
17
+ const files_1 = require("../../utils/files");
18
+ const handlebars_template_engine_1 = require("./handlebars-template-engine");
19
+ const load_handlebars_helpers_1 = require("./load-handlebars-helpers");
20
+ const load_handlebars_partials_1 = require("./load-handlebars-partials");
21
+ class HandlebarsTemplateEngineProvider {
22
+ constructor(props) {
23
+ _HandlebarsTemplateEngineProvider_partialsDir.set(this, void 0);
24
+ _HandlebarsTemplateEngineProvider_helpersDir.set(this, void 0);
25
+ _HandlebarsTemplateEngineProvider_projectConfig.set(this, void 0);
26
+ _HandlebarsTemplateEngineProvider_logger.set(this, void 0);
27
+ __classPrivateFieldSet(this, _HandlebarsTemplateEngineProvider_partialsDir, props.partialsDir, "f");
28
+ __classPrivateFieldSet(this, _HandlebarsTemplateEngineProvider_helpersDir, props.helpersDir, "f");
29
+ __classPrivateFieldSet(this, _HandlebarsTemplateEngineProvider_projectConfig, props.projectConfig, "f");
30
+ __classPrivateFieldSet(this, _HandlebarsTemplateEngineProvider_logger, props.logger, "f");
31
+ }
32
+ async init({ projectDir, logger, }) {
33
+ const te = new handlebars_template_engine_1.HandlebarsTemplateEngine({ projectDir, logger });
34
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_projectConfig, "f").helpers.forEach((config) => {
35
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_logger, "f").debug(`Register Handlebars helper from NPM package: ${config.package}`);
36
+ // eslint-disable-next-line
37
+ const helper = require(config.package);
38
+ const helperWithName = config.name
39
+ ? { ...helper, name: config.name }
40
+ : helper;
41
+ if (typeof helperWithName.fn !== "function") {
42
+ throw new errors_1.TakomoError(`Handlebars helper loaded from an NPM package ${config.package} does not export property 'fn' of type function`);
43
+ }
44
+ if (typeof helperWithName.name !== "string") {
45
+ throw new errors_1.TakomoError(`Handlebars helper loaded from an NPM package ${config.package} does not export property 'name' of type string`);
46
+ }
47
+ te.registerHelper(helperWithName.name, helperWithName.fn);
48
+ });
49
+ const defaultHelpersDirExists = await (0, files_1.dirExists)(__classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_helpersDir, "f"));
50
+ const additionalHelpersDirs = __classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_projectConfig, "f").helpersDir;
51
+ const helpersDirs = defaultHelpersDirExists
52
+ ? [__classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_helpersDir, "f"), ...additionalHelpersDirs]
53
+ : additionalHelpersDirs;
54
+ const defaultPartialsDirExists = await (0, files_1.dirExists)(__classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_partialsDir, "f"));
55
+ const additionalPartialsDirs = __classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_projectConfig, "f").partialsDir;
56
+ const partialsDirs = defaultPartialsDirExists
57
+ ? [__classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_partialsDir, "f"), ...additionalPartialsDirs]
58
+ : additionalPartialsDirs;
59
+ await Promise.all([
60
+ (0, load_handlebars_helpers_1.loadHandlebarsHelpers)(helpersDirs, __classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_logger, "f"), te),
61
+ (0, load_handlebars_partials_1.loadHandlebarsPartials)(partialsDirs, __classPrivateFieldGet(this, _HandlebarsTemplateEngineProvider_logger, "f"), te),
62
+ ]);
63
+ return te;
64
+ }
65
+ }
66
+ exports.HandlebarsTemplateEngineProvider = HandlebarsTemplateEngineProvider;
67
+ _HandlebarsTemplateEngineProvider_partialsDir = new WeakMap(), _HandlebarsTemplateEngineProvider_helpersDir = new WeakMap(), _HandlebarsTemplateEngineProvider_projectConfig = new WeakMap(), _HandlebarsTemplateEngineProvider_logger = new WeakMap();
68
+ //# sourceMappingURL=handlebars-template-engine-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlebars-template-engine-provider.js","sourceRoot":"","sources":["../../../src/templating/handlebars/handlebars-template-engine-provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,+CAAgD;AAChD,6CAAuD;AAOvD,6EAAuE;AACvE,uEAAiE;AACjE,yEAAmE;AASnE,MAAa,gCAAgC;IAQ3C,YAAY,KAA4C;QALxD,gEAA+B;QAC/B,+DAA8B;QAC9B,kEAAoD;QACpD,2DAA2B;QAGzB,uBAAA,IAAI,iDAAgB,KAAK,CAAC,WAAW,MAAA,CAAA;QACrC,uBAAA,IAAI,gDAAe,KAAK,CAAC,UAAU,MAAA,CAAA;QACnC,uBAAA,IAAI,mDAAkB,KAAK,CAAC,aAAa,MAAA,CAAA;QACzC,uBAAA,IAAI,4CAAW,KAAK,CAAC,MAAM,MAAA,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EACT,UAAU,EACV,MAAM,GACc;QACpB,MAAM,EAAE,GAAG,IAAI,qDAAwB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;QAE/D,uBAAA,IAAI,uDAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7C,uBAAA,IAAI,gDAAQ,CAAC,KAAK,CAChB,gDAAgD,MAAM,CAAC,OAAO,EAAE,CACjE,CAAA;YACD,2BAA2B;YAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI;gBAChC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;gBAClC,CAAC,CAAC,MAAM,CAAA;YAEV,IAAI,OAAO,cAAc,CAAC,EAAE,KAAK,UAAU,EAAE;gBAC3C,MAAM,IAAI,oBAAW,CACnB,gDAAgD,MAAM,CAAC,OAAO,iDAAiD,CAChH,CAAA;aACF;YAED,IAAI,OAAO,cAAc,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC3C,MAAM,IAAI,oBAAW,CACnB,gDAAgD,MAAM,CAAC,OAAO,iDAAiD,CAChH,CAAA;aACF;YAED,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QAEF,MAAM,uBAAuB,GAAG,MAAM,IAAA,iBAAS,EAAC,uBAAA,IAAI,oDAAY,CAAC,CAAA;QACjE,MAAM,qBAAqB,GAAG,uBAAA,IAAI,uDAAe,CAAC,UAAU,CAAA;QAE5D,MAAM,WAAW,GAAG,uBAAuB;YACzC,CAAC,CAAC,CAAC,uBAAA,IAAI,oDAAY,EAAE,GAAG,qBAAqB,CAAC;YAC9C,CAAC,CAAC,qBAAqB,CAAA;QAEzB,MAAM,wBAAwB,GAAG,MAAM,IAAA,iBAAS,EAAC,uBAAA,IAAI,qDAAa,CAAC,CAAA;QACnE,MAAM,sBAAsB,GAAG,uBAAA,IAAI,uDAAe,CAAC,WAAW,CAAA;QAE9D,MAAM,YAAY,GAAG,wBAAwB;YAC3C,CAAC,CAAC,CAAC,uBAAA,IAAI,qDAAa,EAAE,GAAG,sBAAsB,CAAC;YAChD,CAAC,CAAC,sBAAsB,CAAA;QAE1B,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAA,+CAAqB,EAAC,WAAW,EAAE,uBAAA,IAAI,gDAAQ,EAAE,EAAE,CAAC;YACpD,IAAA,iDAAsB,EAAC,YAAY,EAAE,uBAAA,IAAI,gDAAQ,EAAE,EAAE,CAAC;SACvD,CAAC,CAAA;QAEF,OAAO,EAAE,CAAA;IACX,CAAC;CACF;AAnED,4EAmEC"}
@@ -0,0 +1,20 @@
1
+ import { TakomoError } from "../../utils/errors";
2
+ import { FilePath } from "../../utils/files";
3
+ import { TkmLogger } from "../../utils/logging";
4
+ import { RenderTemplateFileProps, RenderTemplateProps, TemplateEngine } from "../template-engine";
5
+ export declare class PartialAlreadyRegisteredError extends TakomoError {
6
+ constructor(name: string, pathToPartialFile: FilePath, pathToExistingPartialFile: FilePath);
7
+ }
8
+ interface HandlebarsTemplateEngineProps {
9
+ readonly projectDir: FilePath;
10
+ readonly logger: TkmLogger;
11
+ }
12
+ export declare class HandlebarsTemplateEngine implements TemplateEngine {
13
+ #private;
14
+ constructor({ logger, projectDir }: HandlebarsTemplateEngineProps);
15
+ registerHelper(name: string, fn: any): void;
16
+ registerPartial(name: string, pathToFile: FilePath): Promise<void>;
17
+ renderTemplate({ templateString, variables, }: RenderTemplateProps): Promise<string>;
18
+ renderTemplateFile({ pathToFile, variables, }: RenderTemplateFileProps): Promise<string>;
19
+ }
20
+ export {};
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ var _HandlebarsTemplateEngine_instance, _HandlebarsTemplateEngine_registeredPartials, _HandlebarsTemplateEngine_projectDir, _HandlebarsTemplateEngine_logger;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.HandlebarsTemplateEngine = exports.PartialAlreadyRegisteredError = void 0;
19
+ const handlebars_1 = __importDefault(require("handlebars"));
20
+ const errors_1 = require("../../utils/errors");
21
+ const files_1 = require("../../utils/files");
22
+ const templating_1 = require("../../utils/templating");
23
+ class PartialAlreadyRegisteredError extends errors_1.TakomoError {
24
+ constructor(name, pathToPartialFile, pathToExistingPartialFile) {
25
+ const message = `Partial with name '${name}' already registered from ${pathToExistingPartialFile}`;
26
+ super(message, {
27
+ info: `Could not register partial ${name} from ${pathToPartialFile} because a partial with the same name is already registered`,
28
+ instructions: ["Use another name to register your partial"],
29
+ });
30
+ }
31
+ }
32
+ exports.PartialAlreadyRegisteredError = PartialAlreadyRegisteredError;
33
+ class HandlebarsTemplateEngine {
34
+ constructor({ logger, projectDir }) {
35
+ _HandlebarsTemplateEngine_instance.set(this, handlebars_1.default.create());
36
+ _HandlebarsTemplateEngine_registeredPartials.set(this, new Map());
37
+ _HandlebarsTemplateEngine_projectDir.set(this, void 0);
38
+ _HandlebarsTemplateEngine_logger.set(this, void 0);
39
+ __classPrivateFieldSet(this, _HandlebarsTemplateEngine_projectDir, projectDir, "f");
40
+ __classPrivateFieldSet(this, _HandlebarsTemplateEngine_logger, logger, "f");
41
+ }
42
+ registerHelper(name, fn) {
43
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngine_instance, "f").registerHelper(name, fn);
44
+ }
45
+ async registerPartial(name, pathToFile) {
46
+ const absolutePath = (0, files_1.expandFilePath)(__classPrivateFieldGet(this, _HandlebarsTemplateEngine_projectDir, "f"), pathToFile);
47
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngine_logger, "f").debug(`Register partial '${name}' from file ${absolutePath}`);
48
+ const existingPathToFile = __classPrivateFieldGet(this, _HandlebarsTemplateEngine_registeredPartials, "f").get(name);
49
+ if (existingPathToFile) {
50
+ throw new PartialAlreadyRegisteredError(name, absolutePath, existingPathToFile);
51
+ }
52
+ const partialString = await (0, files_1.readFileContents)(absolutePath);
53
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngine_registeredPartials, "f").set(name, absolutePath);
54
+ const partial = __classPrivateFieldGet(this, _HandlebarsTemplateEngine_instance, "f").compile(partialString);
55
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngine_instance, "f").registerPartial(name, partial);
56
+ }
57
+ // TODO: Add error handling (like done in utils.js/renderTemplate)
58
+ async renderTemplate({ templateString, variables, }) {
59
+ const template = __classPrivateFieldGet(this, _HandlebarsTemplateEngine_instance, "f").compile(templateString, {
60
+ noEscape: true,
61
+ strict: true,
62
+ });
63
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngine_logger, "f").traceText("Template body before rendering:", () => templateString);
64
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngine_logger, "f").traceObject("Render template with variables:", () => variables);
65
+ try {
66
+ const renderedTemplate = template(variables);
67
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngine_logger, "f").traceText("Template body after rendering:", () => renderedTemplate);
68
+ return renderedTemplate;
69
+ }
70
+ catch (e) {
71
+ const errorMessage = (0, templating_1.buildErrorMessage)(`An error occurred while rendering template`, templateString, e);
72
+ throw new errors_1.TakomoError(errorMessage);
73
+ }
74
+ }
75
+ async renderTemplateFile({ pathToFile, variables, }) {
76
+ const absolutePath = (0, files_1.expandFilePath)(__classPrivateFieldGet(this, _HandlebarsTemplateEngine_projectDir, "f"), pathToFile);
77
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngine_logger, "f").trace(`Render template from file ${absolutePath}`);
78
+ if (!(await (0, files_1.fileExists)(absolutePath))) {
79
+ throw new errors_1.TakomoError(`Could not render template from file ${absolutePath} because the file doesn't exist`);
80
+ }
81
+ const templateString = await (0, files_1.readFileContents)(absolutePath);
82
+ try {
83
+ return this.renderTemplate({
84
+ templateString,
85
+ variables,
86
+ });
87
+ }
88
+ catch (e) {
89
+ __classPrivateFieldGet(this, _HandlebarsTemplateEngine_logger, "f").error(`An error occurred while rendering template from file ${pathToFile}`);
90
+ throw e;
91
+ }
92
+ }
93
+ }
94
+ exports.HandlebarsTemplateEngine = HandlebarsTemplateEngine;
95
+ _HandlebarsTemplateEngine_instance = new WeakMap(), _HandlebarsTemplateEngine_registeredPartials = new WeakMap(), _HandlebarsTemplateEngine_projectDir = new WeakMap(), _HandlebarsTemplateEngine_logger = new WeakMap();
96
+ //# sourceMappingURL=handlebars-template-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlebars-template-engine.js","sourceRoot":"","sources":["../../../src/templating/handlebars/handlebars-template-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { FilePath } from "../../utils/files";
2
+ import { TkmLogger } from "../../utils/logging";
3
+ import { HandlebarsTemplateEngine } from "./handlebars-template-engine";
4
+ export declare const loadHandlebarsHelpers: (helpersDirs: ReadonlyArray<FilePath>, logger: TkmLogger, te: HandlebarsTemplateEngine) => Promise<void>;
@@ -3,11 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loadTemplatePartials = exports.loadTemplateHelpers = void 0;
6
+ exports.loadHandlebarsHelpers = void 0;
7
7
  const readdirp_1 = __importDefault(require("readdirp"));
8
- const errors_1 = require("../utils/errors");
9
- const files_1 = require("../utils/files");
10
- const loadTemplateHelpers = async (helpersDirs, logger, te) => {
8
+ const errors_1 = require("../../utils/errors");
9
+ const files_1 = require("../../utils/files");
10
+ const loadHandlebarsHelpers = async (helpersDirs, logger, te) => {
11
11
  for (const helpersDir of helpersDirs) {
12
12
  if (!(await (0, files_1.dirExists)(helpersDir))) {
13
13
  throw new errors_1.TakomoError(`Helpers dir ${helpersDir} does not exists`);
@@ -32,24 +32,5 @@ const loadTemplateHelpers = async (helpersDirs, logger, te) => {
32
32
  }
33
33
  }
34
34
  };
35
- exports.loadTemplateHelpers = loadTemplateHelpers;
36
- const loadTemplatePartials = async (partialsDirs, logger, te) => {
37
- for (const partialsDir of partialsDirs) {
38
- if (!(await (0, files_1.dirExists)(partialsDir))) {
39
- throw new errors_1.TakomoError(`Partials dir ${partialsDir} does not exists`);
40
- }
41
- const partialFiles = await readdirp_1.default.promise(partialsDir, {
42
- alwaysStat: true,
43
- depth: 100,
44
- type: "files",
45
- });
46
- for (const partialFile of partialFiles) {
47
- const name = partialFile.fullPath.substr(partialsDir.length + 1);
48
- logger.debug(`Register partial '${name}' from file ${partialFile.fullPath}`);
49
- const contents = await (0, files_1.readFileContents)(partialFile.fullPath);
50
- te.registerPartial(name, contents, partialFile.fullPath);
51
- }
52
- }
53
- };
54
- exports.loadTemplatePartials = loadTemplatePartials;
55
- //# sourceMappingURL=template-engine.js.map
35
+ exports.loadHandlebarsHelpers = loadHandlebarsHelpers;
36
+ //# sourceMappingURL=load-handlebars-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-handlebars-helpers.js","sourceRoot":"","sources":["../../../src/templating/handlebars/load-handlebars-helpers.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA+B;AAC/B,+CAAgD;AAChD,6CAAuD;AAIhD,MAAM,qBAAqB,GAAG,KAAK,EACxC,WAAoC,EACpC,MAAiB,EACjB,EAA4B,EACb,EAAE;IACjB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;QACpC,IAAI,CAAC,CAAC,MAAM,IAAA,iBAAS,EAAC,UAAU,CAAC,CAAC,EAAE;YAClC,MAAM,IAAI,oBAAW,CAAC,eAAe,UAAU,kBAAkB,CAAC,CAAA;SACnE;QAED,MAAM,WAAW,GAAG,MAAM,kBAAQ,CAAC,OAAO,CAAC,UAAU,EAAE;YACrD,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;SAC9C,CAAC,CAAA;QAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,2BAA2B;YAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;YAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAChB,MAAM,IAAI,oBAAW,CACnB,8BAA8B,UAAU,CAAC,QAAQ,EAAE,CACpD,CAAA;aACF;YACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;gBACd,MAAM,IAAI,oBAAW,CAAC,4BAA4B,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAA;aACzE;YAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YAC/C,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;SAC1C;KACF;AACH,CAAC,CAAA;AAjCY,QAAA,qBAAqB,yBAiCjC"}
@@ -0,0 +1,4 @@
1
+ import { FilePath } from "../../utils/files";
2
+ import { TkmLogger } from "../../utils/logging";
3
+ import { HandlebarsTemplateEngine } from "./handlebars-template-engine";
4
+ export declare const loadHandlebarsPartials: (partialsDirs: ReadonlyArray<FilePath>, logger: TkmLogger, te: HandlebarsTemplateEngine) => Promise<void>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadHandlebarsPartials = void 0;
7
+ const readdirp_1 = __importDefault(require("readdirp"));
8
+ const errors_1 = require("../../utils/errors");
9
+ const files_1 = require("../../utils/files");
10
+ const loadHandlebarsPartials = async (partialsDirs, logger, te) => {
11
+ for (const partialsDir of partialsDirs) {
12
+ if (!(await (0, files_1.dirExists)(partialsDir))) {
13
+ throw new errors_1.TakomoError(`Partials dir ${partialsDir} does not exists`);
14
+ }
15
+ const partialFiles = await readdirp_1.default.promise(partialsDir, {
16
+ alwaysStat: true,
17
+ depth: 100,
18
+ type: "files",
19
+ });
20
+ for (const partialFile of partialFiles) {
21
+ const name = partialFile.fullPath.slice(partialsDir.length + 1);
22
+ await te.registerPartial(name, partialFile.fullPath);
23
+ }
24
+ }
25
+ };
26
+ exports.loadHandlebarsPartials = loadHandlebarsPartials;
27
+ //# sourceMappingURL=load-handlebars-partials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-handlebars-partials.js","sourceRoot":"","sources":["../../../src/templating/handlebars/load-handlebars-partials.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA+B;AAC/B,+CAAgD;AAChD,6CAAuD;AAIhD,MAAM,sBAAsB,GAAG,KAAK,EACzC,YAAqC,EACrC,MAAiB,EACjB,EAA4B,EACb,EAAE;IACjB,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;QACtC,IAAI,CAAC,CAAC,MAAM,IAAA,iBAAS,EAAC,WAAW,CAAC,CAAC,EAAE;YACnC,MAAM,IAAI,oBAAW,CAAC,gBAAgB,WAAW,kBAAkB,CAAC,CAAA;SACrE;QAED,MAAM,YAAY,GAAG,MAAM,kBAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;YACvD,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,OAAO;SACd,CAAC,CAAA;QAEF,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;YACtC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAC/D,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;SACrD;KACF;AACH,CAAC,CAAA;AArBY,QAAA,sBAAsB,0BAqBlC"}
@@ -0,0 +1,3 @@
1
+ import { FilePath } from "../../utils/files";
2
+ import { TemplateEngine } from "../template-engine";
3
+ export declare const renderTemplate: (te: TemplateEngine, filePath: FilePath, templateString: string, variables: unknown) => Promise<string>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderTemplate = void 0;
4
+ const errors_1 = require("../../utils/errors");
5
+ const templating_1 = require("../../utils/templating");
6
+ const renderTemplate = async (te, filePath, templateString, variables) => {
7
+ try {
8
+ return te.renderTemplate({ templateString, variables });
9
+ }
10
+ catch (e) {
11
+ const errorMessage = (0, templating_1.buildErrorMessage)(`An error occurred while rendering file: ${filePath}`, templateString, e);
12
+ throw new errors_1.TakomoError(errorMessage);
13
+ }
14
+ };
15
+ exports.renderTemplate = renderTemplate;
16
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/templating/handlebars/utils.ts"],"names":[],"mappings":";;;AAAA,+CAAgD;AAEhD,uDAA0D;AAGnD,MAAM,cAAc,GAAG,KAAK,EACjC,EAAkB,EAClB,QAAkB,EAClB,cAAsB,EACtB,SAAkB,EACD,EAAE;IACnB,IAAI;QACF,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAA;KACxD;IAAC,OAAO,CAAM,EAAE;QACf,MAAM,YAAY,GAAG,IAAA,8BAAiB,EACpC,2CAA2C,QAAQ,EAAE,EACrD,cAAc,EACd,CAAC,CACF,CAAA;QACD,MAAM,IAAI,oBAAW,CAAC,YAAY,CAAC,CAAA;KACpC;AACH,CAAC,CAAA;AAhBY,QAAA,cAAc,kBAgB1B"}
@@ -0,0 +1,13 @@
1
+ import { FilePath } from "../utils/files";
2
+ import { TkmLogger } from "../utils/logging";
3
+ import { TemplateEngine } from "./template-engine";
4
+ export interface TemplateEngineProps {
5
+ readonly projectDir: FilePath;
6
+ readonly logger: TkmLogger;
7
+ }
8
+ export interface TemplateEngineProvider {
9
+ /**
10
+ * Initialize a template engine.
11
+ */
12
+ readonly init: (props: TemplateEngineProps) => Promise<TemplateEngine>;
13
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=template-engine-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine-provider.js","sourceRoot":"","sources":["../../src/templating/template-engine-provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { FilePath } from "../utils/files";
2
+ export interface RenderTemplateProps {
3
+ /**
4
+ * A template string
5
+ */
6
+ readonly templateString: string;
7
+ /**
8
+ * Variables used to render the template string
9
+ */
10
+ readonly variables: unknown;
11
+ }
12
+ export interface RenderTemplateFileProps {
13
+ /**
14
+ * Path to file containing a template string
15
+ */
16
+ readonly pathToFile: FilePath;
17
+ /**
18
+ * Variables used to render the template string
19
+ */
20
+ readonly variables: unknown;
21
+ }
22
+ /**
23
+ * Template engine to process configuration files.
24
+ */
25
+ export interface TemplateEngine {
26
+ /**
27
+ * Render template from a string.
28
+ */
29
+ readonly renderTemplate: (props: RenderTemplateProps) => Promise<string>;
30
+ /**
31
+ * Render template from a file.
32
+ */
33
+ readonly renderTemplateFile: (props: RenderTemplateFileProps) => Promise<string>;
34
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=template-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../../src/templating/template-engine.ts"],"names":[],"mappings":""}
@@ -1,4 +1,3 @@
1
- import { TakomoError } from "./errors";
2
1
  interface ErrorSpec {
3
2
  readonly lineNumber?: number;
4
3
  readonly endLineNumber?: number;
@@ -7,17 +6,4 @@ interface ErrorSpec {
7
6
  readonly message?: string;
8
7
  }
9
8
  export declare const buildErrorMessage: <E extends Error>(description: string, contents: string, spec: ErrorSpec) => string;
10
- /**
11
- * Template engine to process Handlebars templates.
12
- */
13
- export interface TemplateEngine {
14
- readonly registerHelper: (name: string, fn: any) => void;
15
- readonly registerPartial: (name: string, partialString: string, partialSource: string) => void;
16
- readonly renderTemplate: (string: string, variables: any) => string;
17
- }
18
- export declare class PartialAlreadyRegisteredError extends TakomoError {
19
- constructor(name: string, source: string, existingSource: string);
20
- }
21
- export declare const createTemplateEngine: () => TemplateEngine;
22
- export declare const renderTemplate: (templateEngine: TemplateEngine, filePath: string, contents: string, variables: any) => Promise<string>;
23
9
  export {};
@@ -1,11 +1,6 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.renderTemplate = exports.createTemplateEngine = exports.PartialAlreadyRegisteredError = exports.buildErrorMessage = void 0;
7
- const handlebars_1 = __importDefault(require("handlebars"));
8
- const errors_1 = require("./errors");
3
+ exports.buildErrorMessage = void 0;
9
4
  const linesToIncludeBeforeAndAfter = 3;
10
5
  const calculateFirstLineToInclude = (lineNumber) => {
11
6
  const firstLineNumber = lineNumber - linesToIncludeBeforeAndAfter;
@@ -51,53 +46,4 @@ const buildErrorMessage = (description, contents, spec) => {
51
46
  paddedLines.join("\n"));
52
47
  };
53
48
  exports.buildErrorMessage = buildErrorMessage;
54
- class PartialAlreadyRegisteredError extends errors_1.TakomoError {
55
- constructor(name, source, existingSource) {
56
- const message = `Partial with name '${name}' already registered from ${existingSource}`;
57
- super(message, {
58
- info: `Could not register partial ${name} from source ${source} because a partial with the same name is already registered`,
59
- instructions: ["Use another name to register your partial"],
60
- });
61
- }
62
- }
63
- exports.PartialAlreadyRegisteredError = PartialAlreadyRegisteredError;
64
- const createTemplateEngine = () => {
65
- const instance = handlebars_1.default.create();
66
- const registeredPartials = new Map();
67
- const registerHelper = (name, fn) => {
68
- instance.registerHelper(name, fn);
69
- };
70
- const registerPartial = (name, partialString, partialSource) => {
71
- const existingSource = registeredPartials.get(name);
72
- if (existingSource) {
73
- throw new PartialAlreadyRegisteredError(name, partialSource, existingSource);
74
- }
75
- registeredPartials.set(name, partialSource);
76
- const partial = instance.compile(partialString);
77
- instance.registerPartial(name, partial);
78
- };
79
- const renderTemplate = (string, variables) => {
80
- const template = instance.compile(string, {
81
- noEscape: true,
82
- strict: true,
83
- });
84
- return template(variables);
85
- };
86
- return {
87
- registerHelper,
88
- registerPartial,
89
- renderTemplate,
90
- };
91
- };
92
- exports.createTemplateEngine = createTemplateEngine;
93
- const renderTemplate = async (templateEngine, filePath, contents, variables) => {
94
- try {
95
- return templateEngine.renderTemplate(contents, variables);
96
- }
97
- catch (e) {
98
- const errorMessage = (0, exports.buildErrorMessage)(`An error occurred while rendering file: ${filePath}`, contents, e);
99
- throw new errors_1.TakomoError(errorMessage);
100
- }
101
- };
102
- exports.renderTemplate = renderTemplate;
103
49
  //# sourceMappingURL=templating.js.map