@accordproject/template-engine 2.0.3 → 2.2.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.
- package/dist/index.d.ts +123 -2
- package/dist/index.js +1437 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1414 -0
- package/dist/index.mjs.map +1 -0
- package/dist/runtime.tgz +0 -0
- package/package.json +7 -3
- package/dist/Common.d.ts +0 -20
- package/dist/Common.js +0 -55
- package/dist/Common.js.map +0 -1
- package/dist/TemplateMarkInterpreter.d.ts +0 -34
- package/dist/TemplateMarkInterpreter.js +0 -401
- package/dist/TemplateMarkInterpreter.js.map +0 -1
- package/dist/TemplateMarkToJavaScriptCompiler.d.ts +0 -19
- package/dist/TemplateMarkToJavaScriptCompiler.js +0 -96
- package/dist/TemplateMarkToJavaScriptCompiler.js.map +0 -1
- package/dist/TemplateMarkToTypeScriptCompiler.d.ts +0 -77
- package/dist/TemplateMarkToTypeScriptCompiler.js +0 -311
- package/dist/TemplateMarkToTypeScriptCompiler.js.map +0 -1
- package/dist/TypeScriptCompilationContext.d.ts +0 -15
- package/dist/TypeScriptCompilationContext.js +0 -57
- package/dist/TypeScriptCompilationContext.js.map +0 -1
- package/dist/TypeScriptRuntime.d.ts +0 -14
- package/dist/TypeScriptRuntime.js +0 -79
- package/dist/TypeScriptRuntime.js.map +0 -1
- package/dist/TypeScriptToJavaScriptCompiler.d.ts +0 -14
- package/dist/TypeScriptToJavaScriptCompiler.js +0 -59
- package/dist/TypeScriptToJavaScriptCompiler.js.map +0 -1
- package/dist/compilers/Clause.d.ts +0 -14
- package/dist/compilers/Clause.js +0 -43
- package/dist/compilers/Clause.js.map +0 -1
- package/dist/compilers/Common.d.ts +0 -66
- package/dist/compilers/Common.js +0 -180
- package/dist/compilers/Common.js.map +0 -1
- package/dist/compilers/Conditional.d.ts +0 -12
- package/dist/compilers/Conditional.js +0 -36
- package/dist/compilers/Conditional.js.map +0 -1
- package/dist/compilers/ContractDefinition.d.ts +0 -8
- package/dist/compilers/ContractDefinition.js +0 -33
- package/dist/compilers/ContractDefinition.js.map +0 -1
- package/dist/compilers/EnumVariable.d.ts +0 -8
- package/dist/compilers/EnumVariable.js +0 -28
- package/dist/compilers/EnumVariable.js.map +0 -1
- package/dist/compilers/FormattedVariable.d.ts +0 -8
- package/dist/compilers/FormattedVariable.js +0 -29
- package/dist/compilers/FormattedVariable.js.map +0 -1
- package/dist/compilers/Formula.d.ts +0 -8
- package/dist/compilers/Formula.js +0 -24
- package/dist/compilers/Formula.js.map +0 -1
- package/dist/compilers/Join.d.ts +0 -8
- package/dist/compilers/Join.js +0 -23
- package/dist/compilers/Join.js.map +0 -1
- package/dist/compilers/ListBlock.d.ts +0 -11
- package/dist/compilers/ListBlock.js +0 -39
- package/dist/compilers/ListBlock.js.map +0 -1
- package/dist/compilers/NodeCompilers.d.ts +0 -7
- package/dist/compilers/NodeCompilers.js +0 -89
- package/dist/compilers/NodeCompilers.js.map +0 -1
- package/dist/compilers/Optional.d.ts +0 -11
- package/dist/compilers/Optional.js +0 -48
- package/dist/compilers/Optional.js.map +0 -1
- package/dist/compilers/Variable.d.ts +0 -8
- package/dist/compilers/Variable.js +0 -28
- package/dist/compilers/Variable.js.map +0 -1
- package/dist/compilers/With.d.ts +0 -10
- package/dist/compilers/With.js +0 -23
- package/dist/compilers/With.js.map +0 -1
- package/dist/drafting/Boolean/index.d.ts +0 -6
- package/dist/drafting/Boolean/index.js +0 -30
- package/dist/drafting/Boolean/index.js.map +0 -1
- package/dist/drafting/DateTime/index.d.ts +0 -7
- package/dist/drafting/DateTime/index.js +0 -33
- package/dist/drafting/DateTime/index.js.map +0 -1
- package/dist/drafting/Double/format.d.ts +0 -13
- package/dist/drafting/Double/format.js +0 -55
- package/dist/drafting/Double/format.js.map +0 -1
- package/dist/drafting/Double/index.d.ts +0 -7
- package/dist/drafting/Double/index.js +0 -33
- package/dist/drafting/Double/index.js.map +0 -1
- package/dist/drafting/Integer/format.d.ts +0 -13
- package/dist/drafting/Integer/format.js +0 -45
- package/dist/drafting/Integer/format.js.map +0 -1
- package/dist/drafting/Integer/index.d.ts +0 -7
- package/dist/drafting/Integer/index.js +0 -33
- package/dist/drafting/Integer/index.js.map +0 -1
- package/dist/drafting/Long/index.d.ts +0 -7
- package/dist/drafting/Long/index.js +0 -33
- package/dist/drafting/Long/index.js.map +0 -1
- package/dist/drafting/MonetaryAmount/currencycode.d.ts +0 -35
- package/dist/drafting/MonetaryAmount/currencycode.js +0 -53
- package/dist/drafting/MonetaryAmount/currencycode.js.map +0 -1
- package/dist/drafting/MonetaryAmount/index.d.ts +0 -12
- package/dist/drafting/MonetaryAmount/index.js +0 -67
- package/dist/drafting/MonetaryAmount/index.js.map +0 -1
- package/dist/drafting/String/index.d.ts +0 -6
- package/dist/drafting/String/index.js +0 -25
- package/dist/drafting/String/index.js.map +0 -1
- package/dist/drafting/index.d.ts +0 -1
- package/dist/drafting/index.js +0 -40
- package/dist/drafting/index.js.map +0 -1
- package/dist/model-gen/concerto.d.ts +0 -13
- package/dist/model-gen/concerto.js +0 -5
- package/dist/model-gen/concerto.js.map +0 -1
- package/dist/model-gen/concerto.metamodel@1.0.0.d.ts +0 -196
- package/dist/model-gen/concerto.metamodel@1.0.0.js +0 -5
- package/dist/model-gen/concerto.metamodel@1.0.0.js.map +0 -1
- package/dist/model-gen/concerto@1.0.0.d.ts +0 -19
- package/dist/model-gen/concerto@1.0.0.js +0 -5
- package/dist/model-gen/concerto@1.0.0.js.map +0 -1
- package/dist/model-gen/org.accordproject.ciceromark@0.6.0.d.ts +0 -49
- package/dist/model-gen/org.accordproject.ciceromark@0.6.0.js +0 -5
- package/dist/model-gen/org.accordproject.ciceromark@0.6.0.js.map +0 -1
- package/dist/model-gen/org.accordproject.commonmark@0.5.0.d.ts +0 -89
- package/dist/model-gen/org.accordproject.commonmark@0.5.0.js +0 -5
- package/dist/model-gen/org.accordproject.commonmark@0.5.0.js.map +0 -1
- package/dist/model-gen/org.accordproject.templatemark@0.5.0.d.ts +0 -76
- package/dist/model-gen/org.accordproject.templatemark@0.5.0.js +0 -12
- package/dist/model-gen/org.accordproject.templatemark@0.5.0.js.map +0 -1
- package/dist/runtime/declarations.d.ts +0 -2
- package/dist/runtime/declarations.js +0 -21
- package/dist/runtime/declarations.js.map +0 -1
- package/dist/runtime/runtime.d.ts +0 -1
- package/dist/runtime/runtime.js +0 -20
- package/dist/runtime/runtime.js.map +0 -1
- package/dist/utils.d.ts +0 -5
- package/dist/utils.js +0 -43
- package/dist/utils.js.map +0 -1
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';
|
|
2
|
-
import { TemplateData } from './Common';
|
|
3
|
-
import { GenerationOptions } from './TypeScriptRuntime';
|
|
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, templateConceptFqn?: string);
|
|
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, options?: GenerationOptions): Promise<any>;
|
|
34
|
-
}
|
|
@@ -1,401 +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
|
-
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
|
-
return compiler.compile(templateMark);
|
|
372
|
-
}
|
|
373
|
-
validateCiceroMark(ciceroMark) {
|
|
374
|
-
const 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.CiceroMarkModel.MODEL, 'ciceromark.cto');
|
|
378
|
-
const factory = new concerto_core_1.Factory(modelManager);
|
|
379
|
-
const serializer = new concerto_core_1.Serializer(factory, modelManager);
|
|
380
|
-
try {
|
|
381
|
-
return serializer.fromJSON(ciceroMark);
|
|
382
|
-
}
|
|
383
|
-
catch (err) {
|
|
384
|
-
throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(ciceroMark, null, 2)}`);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
async generate(templateMark, data, options) {
|
|
388
|
-
const factory = new concerto_core_1.Factory(this.modelManager);
|
|
389
|
-
const serializer = new concerto_core_1.Serializer(factory, this.modelManager);
|
|
390
|
-
const templateData = serializer.fromJSON(data);
|
|
391
|
-
if (templateData.getFullyQualifiedType() !== this.templateClass.getFullyQualifiedName()) {
|
|
392
|
-
throw new Error(`Template data must be of type '${this.templateClass.getFullyQualifiedName()}'.`);
|
|
393
|
-
}
|
|
394
|
-
const typedTemplateMark = this.checkTypes(templateMark);
|
|
395
|
-
const jsTemplateMark = this.compileTypeScriptToJavaScript(typedTemplateMark);
|
|
396
|
-
const ciceroMark = generateAgreement(this.modelManager, this.clauseLibrary, jsTemplateMark, data, options);
|
|
397
|
-
return this.validateCiceroMark(ciceroMark);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
exports.TemplateMarkInterpreter = TemplateMarkInterpreter;
|
|
401
|
-
//# 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,19 +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
|
-
compile(templateJson: any): any;
|
|
19
|
-
}
|
|
@@ -1,96 +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
|
-
compile(templateJson) {
|
|
47
|
-
const namedTemplateMark = (0, utils_1.nameUserCode)(templateJson);
|
|
48
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
49
|
-
const that = this;
|
|
50
|
-
const errors = Array();
|
|
51
|
-
const compiled = (0, traverse_1.default)(namedTemplateMark).map(function (x) {
|
|
52
|
-
if (x && CODE_NODES.includes(x.$class)) {
|
|
53
|
-
if (x.code) { // formula
|
|
54
|
-
checkCode(x.code);
|
|
55
|
-
const result = that.compiler.compile((0, utils_1.writeFunctionToString)(that.templateClass, x.name, 'any', x.code.contents));
|
|
56
|
-
if (result.errors.length === 0) {
|
|
57
|
-
x.code.contents = result.code;
|
|
58
|
-
x.code.type = org_accordproject_templatemark_0_5_0_1.CodeType.ES_2020;
|
|
59
|
-
this.update(x);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
errors.push({
|
|
63
|
-
nodeId: x.name,
|
|
64
|
-
code: x.code.contents,
|
|
65
|
-
errors: result.errors
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else if (x.condition) { // condition or clause (boolean condition)
|
|
70
|
-
checkCode(x.condition);
|
|
71
|
-
const result = that.compiler.compile((0, utils_1.writeFunctionToString)(that.templateClass, x.functionName, 'boolean', x.condition.contents));
|
|
72
|
-
if (result.errors.length === 0) {
|
|
73
|
-
x.condition.contents = result.code;
|
|
74
|
-
x.condition.type = org_accordproject_templatemark_0_5_0_1.CodeType.ES_2020;
|
|
75
|
-
this.update(x);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
errors.push({
|
|
79
|
-
nodeId: x.functionName,
|
|
80
|
-
code: x.condition.contents,
|
|
81
|
-
errors: result.errors
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
if (errors.length === 0) {
|
|
88
|
-
return compiled;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
throw errors;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
exports.TemplateMarkToJavaScriptCompiler = TemplateMarkToJavaScriptCompiler;
|
|
96
|
-
//# 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
|
-
}
|