@accordproject/template-engine 2.1.1 → 2.3.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 (127) hide show
  1. package/dist/index.d.ts +53 -2
  2. package/dist/index.js +739 -21
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.mjs +713 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/package.json +6 -2
  7. package/dist/Common.d.ts +0 -20
  8. package/dist/Common.js +0 -55
  9. package/dist/Common.js.map +0 -1
  10. package/dist/TemplateMarkInterpreter.d.ts +0 -34
  11. package/dist/TemplateMarkInterpreter.js +0 -402
  12. package/dist/TemplateMarkInterpreter.js.map +0 -1
  13. package/dist/TemplateMarkToJavaScriptCompiler.d.ts +0 -20
  14. package/dist/TemplateMarkToJavaScriptCompiler.js +0 -99
  15. package/dist/TemplateMarkToJavaScriptCompiler.js.map +0 -1
  16. package/dist/TemplateMarkToTypeScriptCompiler.d.ts +0 -77
  17. package/dist/TemplateMarkToTypeScriptCompiler.js +0 -311
  18. package/dist/TemplateMarkToTypeScriptCompiler.js.map +0 -1
  19. package/dist/TypeScriptCompilationContext.d.ts +0 -15
  20. package/dist/TypeScriptCompilationContext.js +0 -57
  21. package/dist/TypeScriptCompilationContext.js.map +0 -1
  22. package/dist/TypeScriptRuntime.d.ts +0 -14
  23. package/dist/TypeScriptRuntime.js +0 -79
  24. package/dist/TypeScriptRuntime.js.map +0 -1
  25. package/dist/TypeScriptToJavaScriptCompiler.d.ts +0 -16
  26. package/dist/TypeScriptToJavaScriptCompiler.js +0 -69
  27. package/dist/TypeScriptToJavaScriptCompiler.js.map +0 -1
  28. package/dist/compilers/Clause.d.ts +0 -14
  29. package/dist/compilers/Clause.js +0 -43
  30. package/dist/compilers/Clause.js.map +0 -1
  31. package/dist/compilers/Common.d.ts +0 -66
  32. package/dist/compilers/Common.js +0 -180
  33. package/dist/compilers/Common.js.map +0 -1
  34. package/dist/compilers/Conditional.d.ts +0 -12
  35. package/dist/compilers/Conditional.js +0 -36
  36. package/dist/compilers/Conditional.js.map +0 -1
  37. package/dist/compilers/ContractDefinition.d.ts +0 -8
  38. package/dist/compilers/ContractDefinition.js +0 -33
  39. package/dist/compilers/ContractDefinition.js.map +0 -1
  40. package/dist/compilers/EnumVariable.d.ts +0 -8
  41. package/dist/compilers/EnumVariable.js +0 -28
  42. package/dist/compilers/EnumVariable.js.map +0 -1
  43. package/dist/compilers/FormattedVariable.d.ts +0 -8
  44. package/dist/compilers/FormattedVariable.js +0 -29
  45. package/dist/compilers/FormattedVariable.js.map +0 -1
  46. package/dist/compilers/Formula.d.ts +0 -8
  47. package/dist/compilers/Formula.js +0 -24
  48. package/dist/compilers/Formula.js.map +0 -1
  49. package/dist/compilers/Join.d.ts +0 -8
  50. package/dist/compilers/Join.js +0 -23
  51. package/dist/compilers/Join.js.map +0 -1
  52. package/dist/compilers/ListBlock.d.ts +0 -11
  53. package/dist/compilers/ListBlock.js +0 -39
  54. package/dist/compilers/ListBlock.js.map +0 -1
  55. package/dist/compilers/NodeCompilers.d.ts +0 -7
  56. package/dist/compilers/NodeCompilers.js +0 -89
  57. package/dist/compilers/NodeCompilers.js.map +0 -1
  58. package/dist/compilers/Optional.d.ts +0 -11
  59. package/dist/compilers/Optional.js +0 -48
  60. package/dist/compilers/Optional.js.map +0 -1
  61. package/dist/compilers/Variable.d.ts +0 -8
  62. package/dist/compilers/Variable.js +0 -28
  63. package/dist/compilers/Variable.js.map +0 -1
  64. package/dist/compilers/With.d.ts +0 -10
  65. package/dist/compilers/With.js +0 -23
  66. package/dist/compilers/With.js.map +0 -1
  67. package/dist/drafting/Boolean/index.d.ts +0 -6
  68. package/dist/drafting/Boolean/index.js +0 -30
  69. package/dist/drafting/Boolean/index.js.map +0 -1
  70. package/dist/drafting/DateTime/index.d.ts +0 -7
  71. package/dist/drafting/DateTime/index.js +0 -33
  72. package/dist/drafting/DateTime/index.js.map +0 -1
  73. package/dist/drafting/Double/format.d.ts +0 -13
  74. package/dist/drafting/Double/format.js +0 -55
  75. package/dist/drafting/Double/format.js.map +0 -1
  76. package/dist/drafting/Double/index.d.ts +0 -7
  77. package/dist/drafting/Double/index.js +0 -33
  78. package/dist/drafting/Double/index.js.map +0 -1
  79. package/dist/drafting/Integer/format.d.ts +0 -13
  80. package/dist/drafting/Integer/format.js +0 -45
  81. package/dist/drafting/Integer/format.js.map +0 -1
  82. package/dist/drafting/Integer/index.d.ts +0 -7
  83. package/dist/drafting/Integer/index.js +0 -33
  84. package/dist/drafting/Integer/index.js.map +0 -1
  85. package/dist/drafting/Long/index.d.ts +0 -7
  86. package/dist/drafting/Long/index.js +0 -33
  87. package/dist/drafting/Long/index.js.map +0 -1
  88. package/dist/drafting/MonetaryAmount/currencycode.d.ts +0 -35
  89. package/dist/drafting/MonetaryAmount/currencycode.js +0 -53
  90. package/dist/drafting/MonetaryAmount/currencycode.js.map +0 -1
  91. package/dist/drafting/MonetaryAmount/index.d.ts +0 -12
  92. package/dist/drafting/MonetaryAmount/index.js +0 -67
  93. package/dist/drafting/MonetaryAmount/index.js.map +0 -1
  94. package/dist/drafting/String/index.d.ts +0 -6
  95. package/dist/drafting/String/index.js +0 -25
  96. package/dist/drafting/String/index.js.map +0 -1
  97. package/dist/drafting/index.d.ts +0 -1
  98. package/dist/drafting/index.js +0 -40
  99. package/dist/drafting/index.js.map +0 -1
  100. package/dist/model-gen/concerto.d.ts +0 -13
  101. package/dist/model-gen/concerto.js +0 -5
  102. package/dist/model-gen/concerto.js.map +0 -1
  103. package/dist/model-gen/concerto.metamodel@1.0.0.d.ts +0 -196
  104. package/dist/model-gen/concerto.metamodel@1.0.0.js +0 -5
  105. package/dist/model-gen/concerto.metamodel@1.0.0.js.map +0 -1
  106. package/dist/model-gen/concerto@1.0.0.d.ts +0 -19
  107. package/dist/model-gen/concerto@1.0.0.js +0 -5
  108. package/dist/model-gen/concerto@1.0.0.js.map +0 -1
  109. package/dist/model-gen/org.accordproject.ciceromark@0.6.0.d.ts +0 -49
  110. package/dist/model-gen/org.accordproject.ciceromark@0.6.0.js +0 -5
  111. package/dist/model-gen/org.accordproject.ciceromark@0.6.0.js.map +0 -1
  112. package/dist/model-gen/org.accordproject.commonmark@0.5.0.d.ts +0 -89
  113. package/dist/model-gen/org.accordproject.commonmark@0.5.0.js +0 -5
  114. package/dist/model-gen/org.accordproject.commonmark@0.5.0.js.map +0 -1
  115. package/dist/model-gen/org.accordproject.templatemark@0.5.0.d.ts +0 -76
  116. package/dist/model-gen/org.accordproject.templatemark@0.5.0.js +0 -12
  117. package/dist/model-gen/org.accordproject.templatemark@0.5.0.js.map +0 -1
  118. package/dist/runtime/declarations.d.ts +0 -2
  119. package/dist/runtime/declarations.js +0 -21
  120. package/dist/runtime/declarations.js.map +0 -1
  121. package/dist/runtime/runtime.d.ts +0 -1
  122. package/dist/runtime/runtime.js +0 -20
  123. package/dist/runtime/runtime.js.map +0 -1
  124. package/dist/runtime.tgz +0 -0
  125. package/dist/utils.d.ts +0 -5
  126. package/dist/utils.js +0 -43
  127. package/dist/utils.js.map +0 -1
@@ -1,402 +0,0 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
16
- return (mod && mod.__esModule) ? mod : { "default": mod };
17
- };
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.TemplateMarkInterpreter = void 0;
20
- const jsonpath_1 = __importDefault(require("jsonpath"));
21
- const traverse_1 = __importDefault(require("traverse"));
22
- const concerto_core_1 = require("@accordproject/concerto-core");
23
- const drafting_1 = require("./drafting");
24
- const markdown_common_1 = require("@accordproject/markdown-common");
25
- const concerto_core_2 = require("@accordproject/concerto-core");
26
- const Common_1 = require("./Common");
27
- const TemplateMarkToJavaScriptCompiler_1 = require("./TemplateMarkToJavaScriptCompiler");
28
- const org_accordproject_templatemark_0_5_0_1 = require("./model-gen/org.accordproject.templatemark@0.5.0");
29
- const TypeScriptRuntime_1 = require("./TypeScriptRuntime");
30
- const dayjs_1 = __importDefault(require("dayjs"));
31
- function checkCode(code) {
32
- if (code.type !== org_accordproject_templatemark_0_5_0_1.CodeType.ES_2020) {
33
- throw new Error(`Cannot run ${code.contents} as it is not ES_2020 JavaScript.`);
34
- }
35
- }
36
- /**
37
- * Evaluates a JS expression
38
- * @param {*} clauseLibrary the clause library
39
- * @param {*} data the contract data
40
- * @param {string} fn the JS function (including header)
41
- * @param {GenerationOptions} options the generation options
42
- * @returns {object} the result of evaluating the expression against the data
43
- */
44
- function evaluateJavaScript(clauseLibrary, data, fn, options) {
45
- if (!data || !fn) {
46
- throw new Error(`Cannot evaluate JS ${fn} against ${data}`);
47
- }
48
- const functionArgNames = new Array();
49
- functionArgNames.push('data');
50
- functionArgNames.push('library');
51
- functionArgNames.push('options');
52
- functionArgNames.push('dayjs');
53
- functionArgNames.push('jp');
54
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
- const functionArgValues = new Array();
56
- functionArgValues.push(data);
57
- functionArgValues.push(clauseLibrary);
58
- functionArgValues.push(options);
59
- functionArgValues.push(dayjs_1.default);
60
- functionArgValues.push(jsonpath_1.default);
61
- // chop the function header and closing
62
- const expression = fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}'));
63
- if (expression.trim().length === 0) {
64
- throw new Error('Empty expression');
65
- }
66
- try {
67
- const fun = new Function(...functionArgNames, expression); // SECURITY!
68
- const result = fun(...functionArgValues);
69
- return result;
70
- }
71
- catch (err) {
72
- throw new Error(`Caught error ${err} evaluating ${expression} with arguments ${functionArgValues}`);
73
- }
74
- }
75
- /**
76
- * Calculates a JSON path to use to retrieve data, based on a TemplatemMark tree.
77
- * For example, if we hit a VariableDefinition {{city}} that is nested inside a
78
- * WithDefinition {{#with address}} then the JSON path returned should be '$.address.city'.
79
- * Similarly ListBlockDefinition, JoinDefinition and OptionalDefinition also include
80
- * property names that must apply to their child nodes.
81
- * @param {*} rootData the root of the JSON document, typically this is a TemplateMark JSON
82
- * @param {*} currentNode the current TemplateMark node we are processing
83
- * @param {string[]} paths the traverse path to the current node
84
- * @returns {string} the JSON path to use to retrieve data
85
- */
86
- function getJsonPath(rootData, currentNode, paths) {
87
- if (!currentNode) {
88
- throw new Error('Node must be supplied');
89
- }
90
- if (!currentNode.name) {
91
- throw new Error(`Node must have a name: ${JSON.stringify(currentNode)}`);
92
- }
93
- if (currentNode.name.indexOf('.') >= 0) {
94
- // prevent JSON path injection
95
- throw new Error(`Invalid name property ${currentNode.name}`);
96
- }
97
- if (!paths || !paths.length || paths.length < 1) {
98
- throw new Error('Paths must be supplied');
99
- }
100
- const withPath = [];
101
- for (let n = 1; n < paths.length; n++) {
102
- const sub = paths.slice(0, n);
103
- const obj = traverse_1.default.get(rootData, sub);
104
- // HACK
105
- // if(obj===undefined) {
106
- // throw new Error(`Failed to find data with path ${sub} and data ${JSON.stringify(rootData, null, 2)}`);
107
- // }
108
- if (obj && obj.$class) {
109
- if (Common_1.NAVIGATION_NODES.indexOf(obj.$class) >= 0) {
110
- withPath.push(`['${obj.name}']`);
111
- }
112
- }
113
- }
114
- if (currentNode.name !== 'this') {
115
- withPath.push(`['${currentNode.name}']`);
116
- }
117
- return withPath.length > 0 ? `$${withPath.join('')}` : '$';
118
- }
119
- /**
120
- * Generates an AgreementMark JSON document from a template plus data.
121
- * @param {ModelManager} modelManager - the template model
122
- * @param {*} clauseLibrary - the clause library
123
- * @param {*} templateMark - the TemplateMark JSON document
124
- * @param {*} data - the template data JSON
125
- * @param {[GenerationOptions]} options - the generation options
126
- * @returns {*} the AgreementMark JSON
127
- */
128
- function generateAgreement(modelManager, clauseLibrary, templateMark, data, options) {
129
- const introspector = new concerto_core_1.Introspector(modelManager);
130
- return (0, traverse_1.default)(templateMark).map(function (context) {
131
- let stopHere = false;
132
- if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {
133
- const nodeClass = context.$class;
134
- // rewrite node types, mapping from TemplateMark namespace to CiceroMark
135
- const match = nodeClass.match(Common_1.TEMPLATEMARK_RE);
136
- if (match && match.length > 1) {
137
- context.$class = `${markdown_common_1.CiceroMarkModel.NAMESPACE}.${match[3]}`;
138
- }
139
- // convert a contract node to a clause note HACK
140
- if (Common_1.CONTRACT_DEFINITION_RE.test(nodeClass)) {
141
- context.$class = `${markdown_common_1.CommonMarkModel.NAMESPACE}.Paragraph`;
142
- delete context.name;
143
- delete context.elementType;
144
- }
145
- // convert a WithDefinition to a Paragraph in the output
146
- // not 100% sure we want to do that ... we may need to process
147
- // the child variable nodes and reparent them?
148
- if (Common_1.WITH_DEFINITION_RE.test(nodeClass)) {
149
- context.$class = `${markdown_common_1.CommonMarkModel.NAMESPACE}.Paragraph`;
150
- delete context.name;
151
- delete context.elementType;
152
- }
153
- // add a 'value' property to FormulaDefinition
154
- // with the result of evaluating the JS code
155
- else if (Common_1.FORMULA_DEFINITION_RE.test(nodeClass)) {
156
- if (context.code) {
157
- checkCode(context.code);
158
- const result = evaluateJavaScript(clauseLibrary, data, context.code.contents, options);
159
- if (result === null) {
160
- context.value = '<null>';
161
- }
162
- else if (typeof result === 'string') {
163
- context.value = result;
164
- }
165
- else {
166
- context.value = JSON.stringify(result);
167
- }
168
- delete context.code;
169
- }
170
- else {
171
- throw new Error('Formula node is missing code.');
172
- }
173
- }
174
- // evaluate lists, recursing on each list item
175
- else if (Common_1.LISTBLOCK_DEFINITION_RE.test(nodeClass)) {
176
- const path = getJsonPath(templateMark, context, this.path);
177
- const variableValues = jsonpath_1.default.query(data, path, 1);
178
- if (variableValues.length === 0) {
179
- throw new Error(`No values found for path '${path}' in data ${data}.`);
180
- }
181
- else {
182
- const arrayData = variableValues[0];
183
- if (!Array.isArray(arrayData)) {
184
- throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);
185
- }
186
- else {
187
- context.$class = `${markdown_common_1.CommonMarkModel.NAMESPACE}.List`;
188
- delete context.elementType;
189
- delete context.name;
190
- context.nodes = arrayData.map(arrayItem => {
191
- // arrayItem is now the data for the nested traversal
192
- const subResult = generateAgreement(modelManager, clauseLibrary, context.nodes[0].nodes[0], arrayItem);
193
- return {
194
- $class: `${markdown_common_1.CommonMarkModel.NAMESPACE}.Item`,
195
- nodes: subResult.nodes ? subResult.nodes : []
196
- };
197
- });
198
- stopHere = true; // do not process child nodes, we've already done it above...
199
- }
200
- }
201
- }
202
- // map over an array of items, joining them into a Text node
203
- else if (Common_1.JOIN_DEFINITION_RE.test(nodeClass)) {
204
- const path = getJsonPath(templateMark, context, this.path);
205
- const variableValues = jsonpath_1.default.query(data, path, 1);
206
- if (variableValues.length === 0) {
207
- throw new Error(`No values found for path '${path}' in data ${data}.`);
208
- }
209
- else {
210
- const arrayData = variableValues[0];
211
- if (!Array.isArray(arrayData)) {
212
- throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);
213
- }
214
- else {
215
- context.$class = `${markdown_common_1.CommonMarkModel.NAMESPACE}.Text`;
216
- const drafter = (0, drafting_1.getDrafter)(context.elementType);
217
- context.text = (0, TypeScriptRuntime_1.joinList)(arrayData.map(arrayItem => {
218
- return drafter ? drafter(arrayItem, context.format) : arrayItem;
219
- }), context, options);
220
- delete context.elementType;
221
- delete context.name;
222
- delete context.separator;
223
- delete context.locale;
224
- delete context.type;
225
- delete context.style;
226
- delete context.nodes;
227
- stopHere = true; // do not process child nodes, we've already done it above...
228
- }
229
- }
230
- }
231
- // add a 'value' property to VariableDefinition
232
- // with the value of the variable from 'data'
233
- else if (Common_1.VARIABLE_DEFINITION_RE.test(nodeClass) ||
234
- Common_1.ENUM_VARIABLE_DEFINITION_RE.test(nodeClass) ||
235
- Common_1.FORMATTED_VARIABLE_DEFINITION_RE.test(nodeClass)) {
236
- if (typeof data === 'object') {
237
- const path = getJsonPath(templateMark, context, this.path);
238
- const variableValues = jsonpath_1.default.query(data, path, 1);
239
- if (variableValues.length === 0) {
240
- throw new Error(`No values found for path '${path}' in data ${data}.`);
241
- }
242
- else {
243
- // convert the value to a string, optionally using the formatter
244
- const variableValue = variableValues[0];
245
- const type = concerto_core_2.ModelUtil.isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);
246
- // we want to draft Enums as strings, not objects
247
- const drafter = (0, drafting_1.getDrafter)(type && type.isEnum() ? 'String' : context.elementType);
248
- context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue);
249
- }
250
- }
251
- else {
252
- // a list of enum values or primitives brings us here
253
- const variableValue = data;
254
- const type = concerto_core_2.ModelUtil.isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);
255
- // we want to draft Enums as strings, not objects
256
- const drafter = (0, drafting_1.getDrafter)(type && type.isEnum() ? 'String' : context.elementType);
257
- context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue);
258
- }
259
- }
260
- // add a 'isTrue' property to ConditionDefinition
261
- // with the result of evaluating the JS code or a boolean property
262
- else if (Common_1.CONDITIONAL_DEFINITION_RE.test(nodeClass)) {
263
- if (context.condition) {
264
- checkCode(context.condition);
265
- context.isTrue = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options);
266
- }
267
- else {
268
- const path = getJsonPath(templateMark, context, this.path);
269
- const variableValues = jsonpath_1.default.query(data, path, 1);
270
- if (variableValues && variableValues.length) {
271
- if (variableValues.length === 1) {
272
- context.isTrue = !!variableValues[0];
273
- }
274
- else {
275
- throw new Error(`Multiple values found for path '${path}' in data ${data}.`);
276
- }
277
- }
278
- else {
279
- context.isTrue = false;
280
- }
281
- }
282
- context.nodes = context.isTrue ? context.whenTrue : context.whenFalse;
283
- delete context.condition;
284
- delete context.dependencies;
285
- delete context.functionName;
286
- }
287
- // only include the children of a clause if its condition is true
288
- else if (Common_1.CLAUSE_DEFINITION_RE.test(nodeClass)) {
289
- if (context.condition) {
290
- checkCode(context.condition);
291
- const result = !!evaluateJavaScript(clauseLibrary, data, context.condition.contents, options);
292
- if (!result) {
293
- delete context.nodes;
294
- stopHere = true;
295
- }
296
- }
297
- delete context.condition;
298
- delete context.functionName;
299
- }
300
- // add a 'hasSome' property to OptionalDefinition
301
- else if (Common_1.OPTIONAL_DEFINITION_RE.test(nodeClass)) {
302
- const path = getJsonPath(templateMark, context, this.path);
303
- const variableValues = jsonpath_1.default.query(data, path, 1);
304
- if (variableValues && variableValues.length) {
305
- if (variableValues.length === 1) {
306
- context.hasSome = true;
307
- context.whenNone = [];
308
- }
309
- else {
310
- throw new Error(`Multiple values found for path '${path}' in data ${data}.`);
311
- }
312
- }
313
- else {
314
- context.hasSome = false;
315
- context.whenSome = [];
316
- }
317
- context.nodes = context.hasSome ? context.whenSome : context.whenNone;
318
- }
319
- }
320
- this.update(context, stopHere);
321
- });
322
- }
323
- /**
324
- * A template engine: merges the markup and logic of a template with
325
- * JSON data to produce JSON data.
326
- */
327
- class TemplateMarkInterpreter {
328
- constructor(modelManager, clauseLibrary, templateConceptFqn) {
329
- this.modelManager = modelManager;
330
- this.clauseLibrary = clauseLibrary;
331
- this.templateClass = (0, Common_1.getTemplateClassDeclaration)(this.modelManager, templateConceptFqn);
332
- }
333
- /**
334
- * Checks that a TemplateMark JSON document is valid with respect to the
335
- * TemplateMark model, as well as the template model.
336
- *
337
- * Checks:
338
- * 1. Variable names are valid properties in the template model
339
- * 2. Optional properties have guards
340
- * @param {*} templateMark the TemplateMark JSON object
341
- * @returns {*} TemplateMark JSON that has been typed checked and has type metadata added
342
- * @throws {Error} if the templateMark document is invalid
343
- */
344
- checkTypes(templateMark) {
345
- const modelManager = new concerto_core_1.ModelManager({ strict: true });
346
- modelManager.addCTOModel(markdown_common_1.ConcertoMetaModel.MODEL, 'concertometamodel.cto');
347
- modelManager.addCTOModel(markdown_common_1.CommonMarkModel.MODEL, 'commonmark.cto');
348
- modelManager.addCTOModel(markdown_common_1.TemplateMarkModel.MODEL, 'templatemark.cto');
349
- const factory = new concerto_core_1.Factory(modelManager);
350
- const serializer = new concerto_core_1.Serializer(factory, modelManager);
351
- try {
352
- serializer.fromJSON(templateMark);
353
- return templateMark;
354
- }
355
- catch (err) {
356
- throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(templateMark, null, 2)}`);
357
- }
358
- }
359
- /**
360
- * Compiles the code nodes containing TS to code nodes containing JS.
361
- * @param {*} templateMark the TemplateMark JSON object
362
- * @returns {*} TemplateMark JSON with JS nodes
363
- * @throws {Error} if the templateMark document is invalid
364
- */
365
- async compileTypeScriptToJavaScript(templateMark) {
366
- const templateConcept = templateMark.nodes[0].elementType;
367
- if (!templateConcept) {
368
- throw new Error('TemplateMark is not typed');
369
- }
370
- const compiler = new TemplateMarkToJavaScriptCompiler_1.TemplateMarkToJavaScriptCompiler(this.modelManager, templateConcept);
371
- await compiler.initialize();
372
- return compiler.compile(templateMark);
373
- }
374
- validateCiceroMark(ciceroMark) {
375
- const modelManager = new concerto_core_1.ModelManager({ strict: true });
376
- modelManager.addCTOModel(markdown_common_1.ConcertoMetaModel.MODEL, 'concertometamodel.cto');
377
- modelManager.addCTOModel(markdown_common_1.CommonMarkModel.MODEL, 'commonmark.cto');
378
- modelManager.addCTOModel(markdown_common_1.CiceroMarkModel.MODEL, 'ciceromark.cto');
379
- const factory = new concerto_core_1.Factory(modelManager);
380
- const serializer = new concerto_core_1.Serializer(factory, modelManager);
381
- try {
382
- return serializer.fromJSON(ciceroMark);
383
- }
384
- catch (err) {
385
- throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(ciceroMark, null, 2)}`);
386
- }
387
- }
388
- async generate(templateMark, data, options) {
389
- const factory = new concerto_core_1.Factory(this.modelManager);
390
- const serializer = new concerto_core_1.Serializer(factory, this.modelManager);
391
- const templateData = serializer.fromJSON(data);
392
- if (templateData.getFullyQualifiedType() !== this.templateClass.getFullyQualifiedName()) {
393
- throw new Error(`Template data must be of type '${this.templateClass.getFullyQualifiedName()}'.`);
394
- }
395
- const typedTemplateMark = this.checkTypes(templateMark);
396
- const jsTemplateMark = await this.compileTypeScriptToJavaScript(typedTemplateMark);
397
- const ciceroMark = generateAgreement(this.modelManager, this.clauseLibrary, jsTemplateMark, data, options);
398
- return this.validateCiceroMark(ciceroMark);
399
- }
400
- }
401
- exports.TemplateMarkInterpreter = TemplateMarkInterpreter;
402
- //# sourceMappingURL=TemplateMarkInterpreter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TemplateMarkInterpreter.js","sourceRoot":"","sources":["../src/TemplateMarkInterpreter.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';
2
- import { TypeScriptToJavaScriptCompiler } from './TypeScriptToJavaScriptCompiler';
3
- import { TwoSlashReturn } from '@typescript/twoslash';
4
- export 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, templateConceptFqn?: string);
18
- initialize(): Promise<void>;
19
- compile(templateJson: any): any;
20
- }
@@ -1,99 +0,0 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
16
- return (mod && mod.__esModule) ? mod : { "default": mod };
17
- };
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.TemplateMarkToJavaScriptCompiler = void 0;
20
- const traverse_1 = __importDefault(require("traverse"));
21
- const markdown_common_1 = require("@accordproject/markdown-common");
22
- const TypeScriptToJavaScriptCompiler_1 = require("./TypeScriptToJavaScriptCompiler");
23
- const Common_1 = require("./Common");
24
- const org_accordproject_templatemark_0_5_0_1 = require("./model-gen/org.accordproject.templatemark@0.5.0");
25
- const utils_1 = require("./utils");
26
- const CODE_NODES = [
27
- `${markdown_common_1.TemplateMarkModel.NAMESPACE}.FormulaDefinition`,
28
- `${markdown_common_1.TemplateMarkModel.NAMESPACE}.ConditionalDefinition`,
29
- `${markdown_common_1.TemplateMarkModel.NAMESPACE}.ClauseDefinition`,
30
- ];
31
- function checkCode(code) {
32
- if (code.type !== org_accordproject_templatemark_0_5_0_1.CodeType.TYPESCRIPT) {
33
- throw new Error(`Cannot compile ${code.contents} as it is not Typescript.`);
34
- }
35
- }
36
- /**
37
- * Compiles all the Typescript nodes in a TemplateMark JSON
38
- * to ES_2020 and returns a modified TemplateMark JSON.
39
- */
40
- class TemplateMarkToJavaScriptCompiler {
41
- constructor(modelManager, templateConceptFqn) {
42
- this.modelManager = modelManager;
43
- this.compiler = new TypeScriptToJavaScriptCompiler_1.TypeScriptToJavaScriptCompiler(modelManager, templateConceptFqn);
44
- this.templateClass = (0, Common_1.getTemplateClassDeclaration)(modelManager, templateConceptFqn);
45
- }
46
- async initialize() {
47
- await this.compiler.initialize();
48
- }
49
- compile(templateJson) {
50
- const namedTemplateMark = (0, utils_1.nameUserCode)(templateJson);
51
- // eslint-disable-next-line @typescript-eslint/no-this-alias
52
- const that = this;
53
- const errors = Array();
54
- const compiled = (0, traverse_1.default)(namedTemplateMark).map(function (x) {
55
- if (x && CODE_NODES.includes(x.$class)) {
56
- if (x.code) { // formula
57
- checkCode(x.code);
58
- const result = that.compiler.compile((0, utils_1.writeFunctionToString)(that.templateClass, x.name, 'any', x.code.contents));
59
- if (result.errors.length === 0) {
60
- x.code.contents = result.code;
61
- x.code.type = org_accordproject_templatemark_0_5_0_1.CodeType.ES_2020;
62
- this.update(x);
63
- }
64
- else {
65
- errors.push({
66
- nodeId: x.name,
67
- code: x.code.contents,
68
- errors: result.errors
69
- });
70
- }
71
- }
72
- else if (x.condition) { // condition or clause (boolean condition)
73
- checkCode(x.condition);
74
- const result = that.compiler.compile((0, utils_1.writeFunctionToString)(that.templateClass, x.functionName, 'boolean', x.condition.contents));
75
- if (result.errors.length === 0) {
76
- x.condition.contents = result.code;
77
- x.condition.type = org_accordproject_templatemark_0_5_0_1.CodeType.ES_2020;
78
- this.update(x);
79
- }
80
- else {
81
- errors.push({
82
- nodeId: x.functionName,
83
- code: x.condition.contents,
84
- errors: result.errors
85
- });
86
- }
87
- }
88
- }
89
- });
90
- if (errors.length === 0) {
91
- return compiled;
92
- }
93
- else {
94
- throw errors;
95
- }
96
- }
97
- }
98
- exports.TemplateMarkToJavaScriptCompiler = TemplateMarkToJavaScriptCompiler;
99
- //# sourceMappingURL=TemplateMarkToJavaScriptCompiler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TemplateMarkToJavaScriptCompiler.js","sourceRoot":"","sources":["../src/TemplateMarkToJavaScriptCompiler.ts"],"names":[],"mappings":"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"}
@@ -1,77 +0,0 @@
1
- import { ClassDeclaration, ModelManager, Resource } from '@accordproject/concerto-core';
2
- import { FileWriter } from '@accordproject/concerto-util';
3
- export type ProcessingFunction = (fw: FileWriter, level: number, resource: any) => void;
4
- export type CompilationOptions = {
5
- skipGenerator?: boolean;
6
- skipCopyRuntime?: boolean;
7
- };
8
- /**
9
- * Converts TemplateMark DOM to a Typescript function, that, when run with JSON data
10
- * that conforms to the template model will produce AgreementMark JSON output.
11
- */
12
- export declare class TemplateMarkToTypeScriptCompiler {
13
- modelManager: ModelManager;
14
- templateClass: ClassDeclaration;
15
- constructor(modelManager: ModelManager, templateConceptFqn?: string);
16
- writeFunction(fw: FileWriter, functionName: string, returnType: string, code: string): void;
17
- /**
18
- * Get a model manager with templatemark model
19
- * @param {string} outputDir the output directory
20
- * @returns {ModelManager} the model manager
21
- */
22
- getTemplateMarkModelManager(): ModelManager;
23
- /**
24
- * Get a model manager with templatemark model
25
- * @param {string} outputDir the output directory
26
- * @returns {ModelManager} the model manager
27
- */
28
- getCiceroMarkModelManager(): ModelManager;
29
- generateTypeScript(modelManager: ModelManager, outputDir: string): void;
30
- generateSampleData(modelManager: ModelManager, outputDir: string): void;
31
- /**
32
- * The main iteration function over templatemark. This function
33
- * looks up an INodeCompiler that can handle each templatemark node
34
- * and delegates to it for code generation.
35
- * Note that the result of code generation (a CiceroMark node) is left in
36
- * the $result global varianble.
37
- * @param {FileWriter} fw the file writer to use
38
- * @param {number} level the indentation level
39
- * @param {object} templateMark the templatemark node to iterate over
40
- */
41
- static doIt(fw: FileWriter, level: number, templateMark: any): void;
42
- /**
43
- * Converts a TemplateMark document to typescript code that is parameterised
44
- * by the 'data' argument.
45
- *
46
- * The strategy is to traverse the template mark json, converting each node into
47
- * typescript statements that add an equivalent ciceromark node. Variables will
48
- * pull values from 'data'.
49
- *
50
- * Conditionals and formulae will call the functions produced by
51
- * compileUserCode.
52
- *
53
- * Note that code generation process is itself recursive, for example, when
54
- * a list definition node is encountered the list must be iterated over
55
- * based on a variable value coming from data, and code must be
56
- * generated to produce each list item.
57
- *
58
- * All internal variables are prefixed with '$' to ensure (?)
59
- * that they cannot collide with end user variable names.
60
- *
61
- * @param {IDocument} templateMark the TemplateMark Concerto resource
62
- * @param {string} outputDir the output directory for code
63
- */
64
- compileGenerator(templateMark: any, outputDir: string): void;
65
- /**
66
- * Decompresses the base64 zipped runtime into an output folder.
67
- * @param {string} outputDir the output directory to copy the runtime to
68
- */
69
- copyRuntime(outputDir: string): void;
70
- /**
71
- * Create package.json for the generated code
72
- * @param {string} outputDir the output directory to copy the runtime to
73
- */
74
- createPackage(outputDir: string): void;
75
- compile(templateMark: Resource | any, outputDir: string, options?: CompilationOptions): void;
76
- compileUserCode(templateMark: any, outputDir: string): void;
77
- }