@accordproject/template-engine 1.0.4 → 1.0.5

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 (109) hide show
  1. package/dist/Common.d.ts +20 -0
  2. package/dist/Common.js +59 -0
  3. package/dist/Common.js.map +1 -0
  4. package/dist/TemplateMarkInterpreter.d.ts +34 -0
  5. package/dist/TemplateMarkInterpreter.js +432 -0
  6. package/dist/TemplateMarkInterpreter.js.map +1 -0
  7. package/dist/TemplateMarkToJavaScriptCompiler.d.ts +19 -0
  8. package/dist/TemplateMarkToJavaScriptCompiler.js +90 -0
  9. package/dist/TemplateMarkToJavaScriptCompiler.js.map +1 -0
  10. package/dist/TemplateMarkToTypeScriptCompiler.d.ts +69 -0
  11. package/dist/TemplateMarkToTypeScriptCompiler.js +239 -0
  12. package/dist/TemplateMarkToTypeScriptCompiler.js.map +1 -0
  13. package/dist/TypeScriptCompilationContext.d.ts +15 -0
  14. package/dist/TypeScriptCompilationContext.js +45 -0
  15. package/dist/TypeScriptCompilationContext.js.map +1 -0
  16. package/dist/TypeScriptRuntime.d.ts +5 -0
  17. package/dist/TypeScriptRuntime.js +67 -0
  18. package/dist/TypeScriptRuntime.js.map +1 -0
  19. package/dist/TypeScriptToJavaScriptCompiler.d.ts +14 -0
  20. package/dist/TypeScriptToJavaScriptCompiler.js +57 -0
  21. package/dist/TypeScriptToJavaScriptCompiler.js.map +1 -0
  22. package/dist/compilers/Clause.d.ts +14 -0
  23. package/dist/compilers/Clause.js +60 -0
  24. package/dist/compilers/Clause.js.map +1 -0
  25. package/dist/compilers/Common.d.ts +66 -0
  26. package/dist/compilers/Common.js +206 -0
  27. package/dist/compilers/Common.js.map +1 -0
  28. package/dist/compilers/Conditional.d.ts +12 -0
  29. package/dist/compilers/Conditional.js +53 -0
  30. package/dist/compilers/Conditional.js.map +1 -0
  31. package/dist/compilers/ContractDefinition.d.ts +8 -0
  32. package/dist/compilers/ContractDefinition.js +50 -0
  33. package/dist/compilers/ContractDefinition.js.map +1 -0
  34. package/dist/compilers/FormattedVariable.d.ts +8 -0
  35. package/dist/compilers/FormattedVariable.js +46 -0
  36. package/dist/compilers/FormattedVariable.js.map +1 -0
  37. package/dist/compilers/Formula.d.ts +8 -0
  38. package/dist/compilers/Formula.js +41 -0
  39. package/dist/compilers/Formula.js.map +1 -0
  40. package/dist/compilers/Join.d.ts +8 -0
  41. package/dist/compilers/Join.js +39 -0
  42. package/dist/compilers/Join.js.map +1 -0
  43. package/dist/compilers/ListBlock.d.ts +11 -0
  44. package/dist/compilers/ListBlock.js +57 -0
  45. package/dist/compilers/ListBlock.js.map +1 -0
  46. package/dist/compilers/NodeCompilers.d.ts +7 -0
  47. package/dist/compilers/NodeCompilers.js +87 -0
  48. package/dist/compilers/NodeCompilers.js.map +1 -0
  49. package/dist/compilers/Optional.d.ts +11 -0
  50. package/dist/compilers/Optional.js +65 -0
  51. package/dist/compilers/Optional.js.map +1 -0
  52. package/dist/compilers/Variable.d.ts +8 -0
  53. package/dist/compilers/Variable.js +45 -0
  54. package/dist/compilers/Variable.js.map +1 -0
  55. package/dist/compilers/With.d.ts +10 -0
  56. package/dist/compilers/With.js +40 -0
  57. package/dist/compilers/With.js.map +1 -0
  58. package/dist/drafting/Boolean/index.d.ts +6 -0
  59. package/dist/drafting/Boolean/index.js +30 -0
  60. package/dist/drafting/Boolean/index.js.map +1 -0
  61. package/dist/drafting/DateTime/index.d.ts +7 -0
  62. package/dist/drafting/DateTime/index.js +33 -0
  63. package/dist/drafting/DateTime/index.js.map +1 -0
  64. package/dist/drafting/Double/format.d.ts +13 -0
  65. package/dist/drafting/Double/format.js +55 -0
  66. package/dist/drafting/Double/format.js.map +1 -0
  67. package/dist/drafting/Double/index.d.ts +7 -0
  68. package/dist/drafting/Double/index.js +33 -0
  69. package/dist/drafting/Double/index.js.map +1 -0
  70. package/dist/drafting/Integer/format.d.ts +13 -0
  71. package/dist/drafting/Integer/format.js +45 -0
  72. package/dist/drafting/Integer/format.js.map +1 -0
  73. package/dist/drafting/Integer/index.d.ts +7 -0
  74. package/dist/drafting/Integer/index.js +33 -0
  75. package/dist/drafting/Integer/index.js.map +1 -0
  76. package/dist/drafting/Long/index.d.ts +7 -0
  77. package/dist/drafting/Long/index.js +33 -0
  78. package/dist/drafting/Long/index.js.map +1 -0
  79. package/dist/drafting/MonetaryAmount/currencycode.d.ts +35 -0
  80. package/dist/drafting/MonetaryAmount/currencycode.js +53 -0
  81. package/dist/drafting/MonetaryAmount/currencycode.js.map +1 -0
  82. package/dist/drafting/MonetaryAmount/index.d.ts +12 -0
  83. package/dist/drafting/MonetaryAmount/index.js +67 -0
  84. package/dist/drafting/MonetaryAmount/index.js.map +1 -0
  85. package/dist/drafting/String/index.d.ts +6 -0
  86. package/dist/drafting/String/index.js +25 -0
  87. package/dist/drafting/String/index.js.map +1 -0
  88. package/dist/drafting/index.d.ts +1 -0
  89. package/dist/drafting/index.js +36 -0
  90. package/dist/drafting/index.js.map +1 -0
  91. package/dist/index.d.ts +2 -0
  92. package/dist/index.js +21 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/model-gen/concerto.metamodel@1.0.0.d.ts +173 -0
  95. package/dist/model-gen/concerto.metamodel@1.0.0.js +5 -0
  96. package/dist/model-gen/concerto.metamodel@1.0.0.js.map +1 -0
  97. package/dist/model-gen/concerto@1.0.0.d.ts +18 -0
  98. package/dist/model-gen/concerto@1.0.0.js +5 -0
  99. package/dist/model-gen/concerto@1.0.0.js.map +1 -0
  100. package/dist/model-gen/org.accordproject.ciceromark@0.6.0.d.ts +49 -0
  101. package/dist/model-gen/org.accordproject.ciceromark@0.6.0.js +5 -0
  102. package/dist/model-gen/org.accordproject.ciceromark@0.6.0.js.map +1 -0
  103. package/dist/model-gen/org.accordproject.commonmark@0.5.0.d.ts +89 -0
  104. package/dist/model-gen/org.accordproject.commonmark@0.5.0.js +5 -0
  105. package/dist/model-gen/org.accordproject.commonmark@0.5.0.js.map +1 -0
  106. package/dist/model-gen/org.accordproject.templatemark@0.4.0.d.ts +72 -0
  107. package/dist/model-gen/org.accordproject.templatemark@0.4.0.js +11 -0
  108. package/dist/model-gen/org.accordproject.templatemark@0.4.0.js.map +1 -0
  109. package/package.json +1 -1
@@ -0,0 +1,20 @@
1
+ import { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';
2
+ export declare const TEMPLATEMARK_RE: RegExp;
3
+ export declare const FORMULA_DEFINITION_RE: RegExp;
4
+ export declare const VARIABLE_DEFINITION_RE: RegExp;
5
+ export declare const CONDITIONAL_DEFINITION_RE: RegExp;
6
+ export declare const ENUM_VARIABLE_DEFINITION_RE: RegExp;
7
+ export declare const FORMATTED_VARIABLE_DEFINITION_RE: RegExp;
8
+ export declare const WITH_DEFINITION_RE: RegExp;
9
+ export declare const LISTBLOCK_DEFINITION_RE: RegExp;
10
+ export declare const JOIN_DEFINITION_RE: RegExp;
11
+ export declare const OPTIONAL_DEFINITION_RE: RegExp;
12
+ export declare const CLAUSE_DEFINITION_RE: RegExp;
13
+ export declare const CONTRACT_DEFINITION_RE: RegExp;
14
+ export declare type TemplateData = Record<string, unknown>;
15
+ /**
16
+ * TemplateMark nodes that implicity change the data access scope
17
+ * by specifying the name of a property on the node.
18
+ */
19
+ export declare const NAVIGATION_NODES: string[];
20
+ export declare function getTemplateClassDeclaration(modelManager: ModelManager): ClassDeclaration;
package/dist/Common.js ADDED
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /*
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.getTemplateClassDeclaration = exports.NAVIGATION_NODES = exports.CONTRACT_DEFINITION_RE = exports.CLAUSE_DEFINITION_RE = exports.OPTIONAL_DEFINITION_RE = exports.JOIN_DEFINITION_RE = exports.LISTBLOCK_DEFINITION_RE = exports.WITH_DEFINITION_RE = exports.FORMATTED_VARIABLE_DEFINITION_RE = exports.ENUM_VARIABLE_DEFINITION_RE = exports.CONDITIONAL_DEFINITION_RE = exports.VARIABLE_DEFINITION_RE = exports.FORMULA_DEFINITION_RE = exports.TEMPLATEMARK_RE = void 0;
17
+ var concerto_core_1 = require("@accordproject/concerto-core");
18
+ var markdown_common_1 = require("@accordproject/markdown-common");
19
+ // use to create agreementmark from templatemark
20
+ exports.TEMPLATEMARK_RE = /^(org\.accordproject\.templatemark)@(.+)\.(\w+)Definition$/;
21
+ exports.FORMULA_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.FormulaDefinition$/;
22
+ exports.VARIABLE_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.VariableDefinition$/;
23
+ exports.CONDITIONAL_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.ConditionalDefinition$/;
24
+ exports.ENUM_VARIABLE_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.EnumVariableDefinition$/;
25
+ exports.FORMATTED_VARIABLE_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.FormattedVariableDefinition$/;
26
+ exports.WITH_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.WithDefinition$/;
27
+ exports.LISTBLOCK_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.ListBlockDefinition$/;
28
+ exports.JOIN_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.JoinDefinition$/;
29
+ exports.OPTIONAL_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.OptionalDefinition$/;
30
+ exports.CLAUSE_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.ClauseDefinition$/;
31
+ exports.CONTRACT_DEFINITION_RE = /^(org\.accordproject\.templatemark)@(.+)\.ContractDefinition$/;
32
+ /**
33
+ * TemplateMark nodes that implicity change the data access scope
34
+ * by specifying the name of a property on the node.
35
+ */
36
+ exports.NAVIGATION_NODES = [
37
+ "".concat(markdown_common_1.TemplateMarkModel.NAMESPACE, ".ListBlockDefinition"),
38
+ "".concat(markdown_common_1.TemplateMarkModel.NAMESPACE, ".WithDefinition"),
39
+ "".concat(markdown_common_1.TemplateMarkModel.NAMESPACE, ".JoinDefinition"),
40
+ "".concat(markdown_common_1.TemplateMarkModel.NAMESPACE, ".OptionalDefinition"),
41
+ "".concat(markdown_common_1.TemplateMarkModel.NAMESPACE, ".ClauseDefinition")
42
+ ];
43
+ function getTemplateClassDeclaration(modelManager) {
44
+ var introspector = new concerto_core_1.Introspector(modelManager);
45
+ var templateModels = introspector.getClassDeclarations().filter(function (item) {
46
+ return !item.isAbstract() && item.getDecorator('template');
47
+ });
48
+ if (templateModels.length > 1) {
49
+ throw new Error('Found multiple concepts with @template decorator. The model for the template must contain a single concept with the @template decorator.');
50
+ }
51
+ else if (templateModels.length === 0) {
52
+ throw new Error('Failed to find a concept with the @template decorator. The model for the template must contain a single concept with the @template decoratpr.');
53
+ }
54
+ else {
55
+ return templateModels[0];
56
+ }
57
+ }
58
+ exports.getTemplateClassDeclaration = getTemplateClassDeclaration;
59
+ //# sourceMappingURL=Common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Common.js","sourceRoot":"","sources":["../src/Common.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,8DAA4F;AAC5F,kEAAmE;AAEnE,gDAAgD;AACnC,QAAA,eAAe,GAAG,4DAA4D,CAAC;AAC/E,QAAA,qBAAqB,GAAG,8DAA8D,CAAC;AACvF,QAAA,sBAAsB,GAAG,+DAA+D,CAAC;AACzF,QAAA,yBAAyB,GAAG,kEAAkE,CAAC;AAC/F,QAAA,2BAA2B,GAAG,mEAAmE,CAAC;AAClG,QAAA,gCAAgC,GAAG,wEAAwE,CAAC;AAC5G,QAAA,kBAAkB,GAAG,2DAA2D,CAAC;AACjF,QAAA,uBAAuB,GAAG,gEAAgE,CAAC;AAC3F,QAAA,kBAAkB,GAAG,2DAA2D,CAAC;AACjF,QAAA,sBAAsB,GAAG,+DAA+D,CAAC;AACzF,QAAA,oBAAoB,GAAG,6DAA6D,CAAC;AACrF,QAAA,sBAAsB,GAAG,+DAA+D,CAAC;AAItG;;;GAGG;AACU,QAAA,gBAAgB,GAAG;IAC5B,UAAG,mCAAiB,CAAC,SAAS,yBAAsB;IACpD,UAAG,mCAAiB,CAAC,SAAS,oBAAiB;IAC/C,UAAG,mCAAiB,CAAC,SAAS,oBAAiB;IAC/C,UAAG,mCAAiB,CAAC,SAAS,wBAAqB;IACnD,UAAG,mCAAiB,CAAC,SAAS,sBAAmB;CACpD,CAAC;AAEF,SAAgB,2BAA2B,CAAC,YAA0B;IAClE,IAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,YAAY,CAAC,CAAC;IACpD,IAAM,cAAc,GAAG,YAAY,CAAC,oBAAoB,EAAE,CAAC,MAAM,CAAC,UAAC,IAAI;QACnE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,0IAA0I,CAAC,CAAC;KAC/J;SAAM,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;QACpC,MAAM,IAAI,KAAK,CAAC,+IAA+I,CAAC,CAAC;KACpK;SAAM;QACH,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;KAC5B;AACL,CAAC;AAZD,kEAYC"}
@@ -0,0 +1,34 @@
1
+ import dayjs from 'dayjs';
2
+ import { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';
3
+ import { TemplateData } from './Common';
4
+ /**
5
+ * A template engine: merges the markup and logic of a template with
6
+ * JSON data to produce JSON data.
7
+ */
8
+ export declare class TemplateMarkInterpreter {
9
+ modelManager: ModelManager;
10
+ templateClass: ClassDeclaration;
11
+ clauseLibrary: object;
12
+ constructor(modelManager: ModelManager, clauseLibrary: object);
13
+ /**
14
+ * Checks that a TemplateMark JSON document is valid with respect to the
15
+ * TemplateMark model, as well as the template model.
16
+ *
17
+ * Checks:
18
+ * 1. Variable names are valid properties in the template model
19
+ * 2. Optional properties have guards
20
+ * @param {*} templateMark the TemplateMark JSON object
21
+ * @returns {*} TemplateMark JSON that has been typed checked and has type metadata added
22
+ * @throws {Error} if the templateMark document is invalid
23
+ */
24
+ checkTypes(templateMark: object): object;
25
+ /**
26
+ * Compiles the code nodes containing TS to code nodes containing JS.
27
+ * @param {*} templateMark the TemplateMark JSON object
28
+ * @returns {*} TemplateMark JSON with JS nodes
29
+ * @throws {Error} if the templateMark document is invalid
30
+ */
31
+ compileTypeScriptToJavaScript(templateMark: object): object;
32
+ validateCiceroMark(ciceroMark: object): import("@accordproject/concerto-core/types/lib/model/resource");
33
+ generate(templateMark: object, data: TemplateData, now?: dayjs.Dayjs): Promise<any>;
34
+ }
@@ -0,0 +1,432 @@
1
+ "use strict";
2
+ /*
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
16
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17
+ return new (P || (P = Promise))(function (resolve, reject) {
18
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
19
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
20
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
21
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
22
+ });
23
+ };
24
+ var __generator = (this && this.__generator) || function (thisArg, body) {
25
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
26
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
27
+ function verb(n) { return function (v) { return step([n, v]); }; }
28
+ function step(op) {
29
+ if (f) throw new TypeError("Generator is already executing.");
30
+ while (_) try {
31
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
32
+ if (y = 0, t) op = [op[0] & 2, t.value];
33
+ switch (op[0]) {
34
+ case 0: case 1: t = op; break;
35
+ case 4: _.label++; return { value: op[1], done: false };
36
+ case 5: _.label++; y = op[1]; op = [0]; continue;
37
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
38
+ default:
39
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
40
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
41
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
42
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
43
+ if (t[2]) _.ops.pop();
44
+ _.trys.pop(); continue;
45
+ }
46
+ op = body.call(thisArg, _);
47
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
48
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
49
+ }
50
+ };
51
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
52
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
53
+ if (ar || !(i in from)) {
54
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
55
+ ar[i] = from[i];
56
+ }
57
+ }
58
+ return to.concat(ar || Array.prototype.slice.call(from));
59
+ };
60
+ var __importDefault = (this && this.__importDefault) || function (mod) {
61
+ return (mod && mod.__esModule) ? mod : { "default": mod };
62
+ };
63
+ Object.defineProperty(exports, "__esModule", { value: true });
64
+ exports.TemplateMarkInterpreter = void 0;
65
+ var dayjs_1 = __importDefault(require("dayjs"));
66
+ var jsonpath_1 = __importDefault(require("jsonpath"));
67
+ var traverse_1 = __importDefault(require("traverse"));
68
+ var concerto_core_1 = require("@accordproject/concerto-core");
69
+ var drafting_1 = require("./drafting");
70
+ var markdown_common_1 = require("@accordproject/markdown-common");
71
+ var concerto_core_2 = require("@accordproject/concerto-core");
72
+ var Common_1 = require("./Common");
73
+ var TemplateMarkToJavaScriptCompiler_1 = require("./TemplateMarkToJavaScriptCompiler");
74
+ /**
75
+ * Evaluates a JS expression
76
+ * @param {*} clauseLibrary the clause library
77
+ * @param {*} data the contract data
78
+ * @param {string} fn the JS function (including header)
79
+ * @param {Date} now the current value for now
80
+ * @returns {object} the result of evaluating the expression against the data
81
+ */
82
+ function evaluateJavaScript(clauseLibrary, data, fn, now) {
83
+ if (!data || !fn) {
84
+ throw new Error("Cannot evaluate JS ".concat(fn, " against ").concat(data));
85
+ }
86
+ var runtimeNow = now ? now : (0, dayjs_1.default)();
87
+ var functionArgNames = new Array();
88
+ functionArgNames.push('data');
89
+ functionArgNames.push('library');
90
+ functionArgNames.push('now');
91
+ functionArgNames.push('jp');
92
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
93
+ var functionArgValues = new Array();
94
+ functionArgValues.push(data);
95
+ functionArgValues.push(clauseLibrary);
96
+ functionArgValues.push(runtimeNow);
97
+ functionArgValues.push(jsonpath_1.default);
98
+ // chop the function header and closing
99
+ var expression = fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}'));
100
+ if (expression.trim().length === 0) {
101
+ throw new Error('Empty expression');
102
+ }
103
+ try {
104
+ var fun = new (Function.bind.apply(Function, __spreadArray(__spreadArray([void 0], functionArgNames, false), [expression], false)))(); // SECURITY!
105
+ var result = fun.apply(void 0, functionArgValues);
106
+ return result;
107
+ }
108
+ catch (err) {
109
+ throw new Error("Caught error ".concat(err, " evaluating ").concat(expression, " with arguments ").concat(functionArgValues));
110
+ }
111
+ }
112
+ /**
113
+ * Calculates a JSON path to use to retrieve data, based on a TemplatemMark tree.
114
+ * For example, if we hit a VariableDefinition {{city}} that is nested inside a
115
+ * WithDefinition {{#with address}} then the JSON path returned should be '$.address.city'.
116
+ * Similarly ListBlockDefinition, JoinDefinition and OptionalDefinition also include
117
+ * property names that must apply to their child nodes.
118
+ * @param {*} rootData the root of the JSON document, typically this is a TemplateMark JSON
119
+ * @param {*} currentNode the current TemplateMark node we are processing
120
+ * @param {string[]} paths the traverse path to the current node
121
+ * @returns {string} the JSON path to use to retrieve data
122
+ */
123
+ function getJsonPath(rootData, currentNode, paths) {
124
+ if (!currentNode) {
125
+ throw new Error('Node must be supplied');
126
+ }
127
+ if (!currentNode.name) {
128
+ throw new Error("Node must have a name: ".concat(JSON.stringify(currentNode)));
129
+ }
130
+ if (currentNode.name.indexOf('.') >= 0) {
131
+ // prevent JSON path injection
132
+ throw new Error("Invalid name property ".concat(currentNode.name));
133
+ }
134
+ if (!paths || !paths.length || paths.length < 1) {
135
+ throw new Error('Paths must be supplied');
136
+ }
137
+ var withPath = [];
138
+ for (var n = 1; n < paths.length; n++) {
139
+ var sub = paths.slice(0, n);
140
+ var obj = traverse_1.default.get(rootData, sub);
141
+ // HACK
142
+ // if(obj===undefined) {
143
+ // throw new Error(`Failed to find data with path ${sub} and data ${JSON.stringify(rootData, null, 2)}`);
144
+ // }
145
+ if (obj && obj.$class) {
146
+ if (Common_1.NAVIGATION_NODES.indexOf(obj.$class) >= 0) {
147
+ withPath.push("['".concat(obj.name, "']"));
148
+ }
149
+ }
150
+ }
151
+ if (currentNode.name !== 'this') {
152
+ withPath.push("['".concat(currentNode.name, "']"));
153
+ }
154
+ return withPath.length > 0 ? "$".concat(withPath.join('')) : '$';
155
+ }
156
+ /**
157
+ * Generates an AgreementMark JSON document from a template plus data.
158
+ * @param {ModelManager} modelManager - the template model
159
+ * @param {*} clauseLibrary - the clause library
160
+ * @param {*} templateMark - the TemplateMark JSON document
161
+ * @param {*} data - the template data JSON
162
+ * @param {[dayjs.Dayjs]} now - date/time to use for the now variable
163
+ * @returns {*} the AgreementMark JSON
164
+ */
165
+ function generateAgreement(modelManager, clauseLibrary, templateMark, data, now) {
166
+ var introspector = new concerto_core_1.Introspector(modelManager);
167
+ return (0, traverse_1.default)(templateMark).map(function (context) {
168
+ var stopHere = false;
169
+ if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {
170
+ var nodeClass = context.$class;
171
+ // rewrite node types, mapping from TemplateMark namespace to CiceroMark
172
+ var match = nodeClass.match(Common_1.TEMPLATEMARK_RE);
173
+ if (match && match.length > 1) {
174
+ context.$class = "".concat(markdown_common_1.CiceroMarkModel.NAMESPACE, ".").concat(match[3]);
175
+ }
176
+ // convert a contract node to a clause note HACK
177
+ if (Common_1.CONTRACT_DEFINITION_RE.test(nodeClass)) {
178
+ context.$class = "".concat(markdown_common_1.CommonMarkModel.NAMESPACE, ".Paragraph");
179
+ delete context.name;
180
+ delete context.elementType;
181
+ }
182
+ // convert a WithDefinition to a Paragraph in the output
183
+ // not 100% sure we want to do that ... we may need to process
184
+ // the child variable nodes and reparent them?
185
+ if (Common_1.WITH_DEFINITION_RE.test(nodeClass)) {
186
+ context.$class = "".concat(markdown_common_1.CommonMarkModel.NAMESPACE, ".Paragraph");
187
+ delete context.name;
188
+ delete context.elementType;
189
+ }
190
+ // add a 'value' property to FormulaDefinition
191
+ // with the result of evaluating the JS code
192
+ else if (Common_1.FORMULA_DEFINITION_RE.test(nodeClass)) {
193
+ if (context.code) {
194
+ var result = evaluateJavaScript(clauseLibrary, data, context.code.contents, now);
195
+ if (result === null) {
196
+ context.value = '<null>';
197
+ }
198
+ else if (typeof result === 'string') {
199
+ context.value = result;
200
+ }
201
+ else {
202
+ context.value = JSON.stringify(result);
203
+ }
204
+ delete context.code;
205
+ }
206
+ else {
207
+ throw new Error('Formula node is missing code.');
208
+ }
209
+ }
210
+ // evaluate lists, recursing on each list item
211
+ else if (Common_1.LISTBLOCK_DEFINITION_RE.test(nodeClass)) {
212
+ var path = getJsonPath(templateMark, context, this.path);
213
+ var variableValues = jsonpath_1.default.query(data, path, 1);
214
+ if (variableValues.length === 0) {
215
+ throw new Error("No values found for path '".concat(path, "' in data ").concat(data, "."));
216
+ }
217
+ else {
218
+ var arrayData = variableValues[0];
219
+ if (!Array.isArray(arrayData)) {
220
+ throw new Error("Values found for path '".concat(path, "' in data ").concat(data, " is not an array: ").concat(arrayData, "."));
221
+ }
222
+ else {
223
+ context.$class = "".concat(markdown_common_1.CommonMarkModel.NAMESPACE, ".List");
224
+ delete context.elementType;
225
+ delete context.name;
226
+ context.nodes = arrayData.map(function (arrayItem) {
227
+ // arrayItem is now the data for the nested traversal
228
+ var subResult = generateAgreement(modelManager, clauseLibrary, context.nodes[0].nodes[0], arrayItem);
229
+ return {
230
+ $class: "".concat(markdown_common_1.CommonMarkModel.NAMESPACE, ".Item"),
231
+ nodes: subResult.nodes ? subResult.nodes : []
232
+ };
233
+ });
234
+ stopHere = true; // do not process child nodes, we've already done it above...
235
+ }
236
+ }
237
+ }
238
+ // map over an array of items, joining them into a Text node
239
+ else if (Common_1.JOIN_DEFINITION_RE.test(nodeClass)) {
240
+ var path = getJsonPath(templateMark, context, this.path);
241
+ var variableValues = jsonpath_1.default.query(data, path, 1);
242
+ if (variableValues.length === 0) {
243
+ throw new Error("No values found for path '".concat(path, "' in data ").concat(data, "."));
244
+ }
245
+ else {
246
+ var arrayData = variableValues[0];
247
+ if (!Array.isArray(arrayData)) {
248
+ throw new Error("Values found for path '".concat(path, "' in data ").concat(data, " is not an array: ").concat(arrayData, "."));
249
+ }
250
+ else {
251
+ context.$class = "".concat(markdown_common_1.CommonMarkModel.NAMESPACE, ".Text");
252
+ var drafter_1 = drafting_1.draftingMap.get(context.elementType);
253
+ context.text = arrayData.map(function (arrayItem) {
254
+ return drafter_1 ? drafter_1(arrayItem, context.format) : arrayItem;
255
+ }).join(context.separator);
256
+ delete context.elementType;
257
+ delete context.name;
258
+ delete context.separator;
259
+ delete context.nodes;
260
+ stopHere = true; // do not process child nodes, we've already done it above...
261
+ }
262
+ }
263
+ }
264
+ // add a 'value' property to VariableDefinition
265
+ // with the value of the variable from 'data'
266
+ else if (Common_1.VARIABLE_DEFINITION_RE.test(nodeClass) ||
267
+ Common_1.ENUM_VARIABLE_DEFINITION_RE.test(nodeClass) ||
268
+ Common_1.FORMATTED_VARIABLE_DEFINITION_RE.test(nodeClass)) {
269
+ if (typeof data === 'object') {
270
+ var path = getJsonPath(templateMark, context, this.path);
271
+ var variableValues = jsonpath_1.default.query(data, path, 1);
272
+ if (variableValues.length === 0) {
273
+ throw new Error("No values found for path '".concat(path, "' in data ").concat(data, "."));
274
+ }
275
+ else {
276
+ // convert the value to a string, optionally using the formatter
277
+ var variableValue = variableValues[0];
278
+ var drafter = drafting_1.draftingMap.get(context.elementType);
279
+ context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue);
280
+ }
281
+ }
282
+ else {
283
+ // a list of enum values or primitives brings us here
284
+ var variableValue = data;
285
+ var type = concerto_core_2.ModelUtil.isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);
286
+ // we want to draft Enums as strings, not objects
287
+ var drafter = drafting_1.draftingMap.get(type && type.isEnum() ? 'String' : context.elementType);
288
+ context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue);
289
+ }
290
+ }
291
+ // add a 'isTrue' property to ConditionDefinition
292
+ // with the result of evaluating the JS code or a boolean property
293
+ else if (Common_1.CONDITIONAL_DEFINITION_RE.test(nodeClass)) {
294
+ if (context.condition) {
295
+ context.isTrue = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, now);
296
+ }
297
+ else {
298
+ var path = getJsonPath(templateMark, context, this.path);
299
+ var variableValues = jsonpath_1.default.query(data, path, 1);
300
+ if (variableValues && variableValues.length) {
301
+ if (variableValues.length === 1) {
302
+ context.isTrue = !!variableValues[0];
303
+ }
304
+ else {
305
+ throw new Error("Multiple values found for path '".concat(path, "' in data ").concat(data, "."));
306
+ }
307
+ }
308
+ else {
309
+ context.isTrue = false;
310
+ }
311
+ }
312
+ context.nodes = context.isTrue ? context.whenTrue : context.whenFalse;
313
+ delete context.condition;
314
+ delete context.dependencies;
315
+ delete context.functionName;
316
+ }
317
+ // only include the children of a clause if its condition is true
318
+ else if (Common_1.CLAUSE_DEFINITION_RE.test(nodeClass)) {
319
+ if (context.condition) {
320
+ var result = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, now);
321
+ if (!result) {
322
+ delete context.nodes;
323
+ stopHere = true;
324
+ }
325
+ }
326
+ delete context.condition;
327
+ delete context.functionName;
328
+ }
329
+ // add a 'hasSome' property to OptionalDefinition
330
+ else if (Common_1.OPTIONAL_DEFINITION_RE.test(nodeClass)) {
331
+ var path = getJsonPath(templateMark, context, this.path);
332
+ var variableValues = jsonpath_1.default.query(data, path, 1);
333
+ if (variableValues && variableValues.length) {
334
+ if (variableValues.length === 1) {
335
+ context.hasSome = true;
336
+ context.whenNone = [];
337
+ }
338
+ else {
339
+ throw new Error("Multiple values found for path '".concat(path, "' in data ").concat(data, "."));
340
+ }
341
+ }
342
+ else {
343
+ context.hasSome = false;
344
+ context.whenSome = [];
345
+ }
346
+ context.nodes = context.hasSome ? context.whenSome : context.whenNone;
347
+ }
348
+ }
349
+ this.update(context, stopHere);
350
+ });
351
+ }
352
+ /**
353
+ * A template engine: merges the markup and logic of a template with
354
+ * JSON data to produce JSON data.
355
+ */
356
+ var TemplateMarkInterpreter = /** @class */ (function () {
357
+ function TemplateMarkInterpreter(modelManager, clauseLibrary) {
358
+ this.modelManager = modelManager;
359
+ this.clauseLibrary = clauseLibrary;
360
+ this.templateClass = (0, Common_1.getTemplateClassDeclaration)(this.modelManager);
361
+ }
362
+ /**
363
+ * Checks that a TemplateMark JSON document is valid with respect to the
364
+ * TemplateMark model, as well as the template model.
365
+ *
366
+ * Checks:
367
+ * 1. Variable names are valid properties in the template model
368
+ * 2. Optional properties have guards
369
+ * @param {*} templateMark the TemplateMark JSON object
370
+ * @returns {*} TemplateMark JSON that has been typed checked and has type metadata added
371
+ * @throws {Error} if the templateMark document is invalid
372
+ */
373
+ TemplateMarkInterpreter.prototype.checkTypes = function (templateMark) {
374
+ var modelManager = new concerto_core_1.ModelManager({ strict: true });
375
+ modelManager.addCTOModel(markdown_common_1.ConcertoMetaModel.MODEL, 'concertometamodel.cto');
376
+ modelManager.addCTOModel(markdown_common_1.CommonMarkModel.MODEL, 'commonmark.cto');
377
+ modelManager.addCTOModel(markdown_common_1.TemplateMarkModel.MODEL, 'templatemark.cto');
378
+ var factory = new concerto_core_1.Factory(modelManager);
379
+ var serializer = new concerto_core_1.Serializer(factory, modelManager);
380
+ try {
381
+ serializer.fromJSON(templateMark);
382
+ return templateMark;
383
+ }
384
+ catch (err) {
385
+ throw new Error("Generated invalid agreement: ".concat(err, ": ").concat(JSON.stringify(templateMark, null, 2)));
386
+ }
387
+ };
388
+ /**
389
+ * Compiles the code nodes containing TS to code nodes containing JS.
390
+ * @param {*} templateMark the TemplateMark JSON object
391
+ * @returns {*} TemplateMark JSON with JS nodes
392
+ * @throws {Error} if the templateMark document is invalid
393
+ */
394
+ TemplateMarkInterpreter.prototype.compileTypeScriptToJavaScript = function (templateMark) {
395
+ var compiler = new TemplateMarkToJavaScriptCompiler_1.TemplateMarkToJavaScriptCompiler(this.modelManager);
396
+ return compiler.compile(templateMark);
397
+ };
398
+ TemplateMarkInterpreter.prototype.validateCiceroMark = function (ciceroMark) {
399
+ var modelManager = new concerto_core_1.ModelManager({ strict: true });
400
+ modelManager.addCTOModel(markdown_common_1.ConcertoMetaModel.MODEL, 'concertometamodel.cto');
401
+ modelManager.addCTOModel(markdown_common_1.CommonMarkModel.MODEL, 'commonmark.cto');
402
+ modelManager.addCTOModel(markdown_common_1.CiceroMarkModel.MODEL, 'ciceromark.cto');
403
+ var factory = new concerto_core_1.Factory(modelManager);
404
+ var serializer = new concerto_core_1.Serializer(factory, modelManager);
405
+ try {
406
+ return serializer.fromJSON(ciceroMark);
407
+ }
408
+ catch (err) {
409
+ throw new Error("Generated invalid agreement: ".concat(err, ": ").concat(JSON.stringify(ciceroMark, null, 2)));
410
+ }
411
+ };
412
+ TemplateMarkInterpreter.prototype.generate = function (templateMark, data, now) {
413
+ return __awaiter(this, void 0, void 0, function () {
414
+ var factory, serializer, templateData, typedTemplateMark, jsTemplateMark, ciceroMark;
415
+ return __generator(this, function (_a) {
416
+ factory = new concerto_core_1.Factory(this.modelManager);
417
+ serializer = new concerto_core_1.Serializer(factory, this.modelManager);
418
+ templateData = serializer.fromJSON(data);
419
+ if (templateData.getFullyQualifiedType() !== this.templateClass.getFullyQualifiedName()) {
420
+ throw new Error("Template data must be of type '".concat(this.templateClass.getFullyQualifiedName(), "'."));
421
+ }
422
+ typedTemplateMark = this.checkTypes(templateMark);
423
+ jsTemplateMark = this.compileTypeScriptToJavaScript(typedTemplateMark);
424
+ ciceroMark = generateAgreement(this.modelManager, this.clauseLibrary, jsTemplateMark, data, now);
425
+ return [2 /*return*/, this.validateCiceroMark(ciceroMark)];
426
+ });
427
+ });
428
+ };
429
+ return TemplateMarkInterpreter;
430
+ }());
431
+ exports.TemplateMarkInterpreter = TemplateMarkInterpreter;
432
+ //# sourceMappingURL=TemplateMarkInterpreter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateMarkInterpreter.js","sourceRoot":"","sources":["../src/TemplateMarkInterpreter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';
2
+ import { TypeScriptToJavaScriptCompiler } from './TypeScriptToJavaScriptCompiler';
3
+ import { TwoSlashReturn } from '@typescript/twoslash';
4
+ export declare type CompilerError = {
5
+ nodeId: string;
6
+ code: string;
7
+ errors: TwoSlashReturn['errors'];
8
+ };
9
+ /**
10
+ * Compiles all the Typescript nodes in a TemplateMark JSON
11
+ * to ES_2020 and returns a modified TemplateMark JSON.
12
+ */
13
+ export declare class TemplateMarkToJavaScriptCompiler {
14
+ modelManager: ModelManager;
15
+ compiler: TypeScriptToJavaScriptCompiler;
16
+ templateClass: ClassDeclaration;
17
+ constructor(modelManager: ModelManager);
18
+ compile(templateJson: any): any;
19
+ }