@accordproject/template-engine 3.0.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/lib/JavaScriptEvaluator.d.ts +71 -0
- package/lib/JavaScriptEvaluator.js +245 -0
- package/lib/JavaScriptEvaluator.js.map +1 -0
- package/lib/TemplateArchiveProcessor.d.ts +61 -0
- package/lib/TemplateArchiveProcessor.js +152 -0
- package/lib/TemplateArchiveProcessor.js.map +1 -0
- package/lib/TemplateMarkInterpreter.d.ts +34 -0
- package/lib/TemplateMarkInterpreter.js +689 -0
- package/lib/TemplateMarkInterpreter.js.map +1 -0
- package/lib/TemplateMarkNodes.d.ts +19 -0
- package/lib/TemplateMarkNodes.js +45 -0
- package/lib/TemplateMarkNodes.js.map +1 -0
- package/lib/TemplateMarkToJavaScriptCompiler.d.ts +20 -0
- package/lib/TemplateMarkToJavaScriptCompiler.js +99 -0
- package/lib/TemplateMarkToJavaScriptCompiler.js.map +1 -0
- package/lib/TypeScriptCompilationContext.d.ts +15 -0
- package/lib/TypeScriptCompilationContext.js +57 -0
- package/lib/TypeScriptCompilationContext.js.map +1 -0
- package/lib/TypeScriptRuntime.d.ts +17 -0
- package/lib/TypeScriptRuntime.js +84 -0
- package/lib/TypeScriptRuntime.js.map +1 -0
- package/lib/TypeScriptToJavaScriptCompiler.d.ts +11 -0
- package/lib/TypeScriptToJavaScriptCompiler.js +169 -0
- package/lib/TypeScriptToJavaScriptCompiler.js.map +1 -0
- package/lib/drafting/Boolean/index.d.ts +6 -0
- package/lib/drafting/Boolean/index.js +30 -0
- package/lib/drafting/Boolean/index.js.map +1 -0
- package/lib/drafting/DateTime/index.d.ts +8 -0
- package/lib/drafting/DateTime/index.js +33 -0
- package/lib/drafting/DateTime/index.js.map +1 -0
- package/lib/drafting/Double/format.d.ts +14 -0
- package/lib/drafting/Double/format.js +62 -0
- package/lib/drafting/Double/format.js.map +1 -0
- package/lib/drafting/Double/index.d.ts +8 -0
- package/lib/drafting/Double/index.js +33 -0
- package/lib/drafting/Double/index.js.map +1 -0
- package/lib/drafting/DraftFormat.d.ts +5 -0
- package/lib/drafting/DraftFormat.js +18 -0
- package/lib/drafting/DraftFormat.js.map +1 -0
- package/lib/drafting/Duration/index.d.ts +6 -0
- package/lib/drafting/Duration/index.js +39 -0
- package/lib/drafting/Duration/index.js.map +1 -0
- package/lib/drafting/Integer/format.d.ts +14 -0
- package/lib/drafting/Integer/format.js +52 -0
- package/lib/drafting/Integer/format.js.map +1 -0
- package/lib/drafting/Integer/index.d.ts +8 -0
- package/lib/drafting/Integer/index.js +33 -0
- package/lib/drafting/Integer/index.js.map +1 -0
- package/lib/drafting/Long/index.d.ts +8 -0
- package/lib/drafting/Long/index.js +33 -0
- package/lib/drafting/Long/index.js.map +1 -0
- package/lib/drafting/MonetaryAmount/currencycode.d.ts +35 -0
- package/lib/drafting/MonetaryAmount/currencycode.js +53 -0
- package/lib/drafting/MonetaryAmount/currencycode.js.map +1 -0
- package/lib/drafting/MonetaryAmount/index.d.ts +13 -0
- package/lib/drafting/MonetaryAmount/index.js +67 -0
- package/lib/drafting/MonetaryAmount/index.js.map +1 -0
- package/lib/drafting/String/index.d.ts +6 -0
- package/lib/drafting/String/index.js +25 -0
- package/lib/drafting/String/index.js.map +1 -0
- package/lib/drafting/index.d.ts +2 -0
- package/lib/drafting/index.js +43 -0
- package/lib/drafting/index.js.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.js +42 -0
- package/lib/index.js.map +1 -0
- package/lib/model-gen/concerto.d.ts +13 -0
- package/lib/model-gen/concerto.js +4 -0
- package/lib/model-gen/concerto.js.map +1 -0
- package/lib/model-gen/concerto.metamodel@1.0.0.d.ts +196 -0
- package/lib/model-gen/concerto.metamodel@1.0.0.js +4 -0
- package/lib/model-gen/concerto.metamodel@1.0.0.js.map +1 -0
- package/lib/model-gen/concerto@1.0.0.d.ts +19 -0
- package/lib/model-gen/concerto@1.0.0.js +4 -0
- package/lib/model-gen/concerto@1.0.0.js.map +1 -0
- package/lib/model-gen/org.accordproject.ciceromark@0.6.0.d.ts +49 -0
- package/lib/model-gen/org.accordproject.ciceromark@0.6.0.js +4 -0
- package/lib/model-gen/org.accordproject.ciceromark@0.6.0.js.map +1 -0
- package/lib/model-gen/org.accordproject.commonmark@0.5.0.d.ts +89 -0
- package/lib/model-gen/org.accordproject.commonmark@0.5.0.js +4 -0
- package/lib/model-gen/org.accordproject.commonmark@0.5.0.js.map +1 -0
- package/lib/model-gen/org.accordproject.templatemark@0.5.0.d.ts +76 -0
- package/lib/model-gen/org.accordproject.templatemark@0.5.0.js +11 -0
- package/lib/model-gen/org.accordproject.templatemark@0.5.0.js.map +1 -0
- package/lib/runtime/declarations.d.ts +3 -0
- package/lib/runtime/declarations.js +22 -0
- package/lib/runtime/declarations.js.map +1 -0
- package/lib/slc/model-gen/concerto.d.ts +13 -0
- package/lib/slc/model-gen/concerto.decorator@1.0.0.d.ts +6 -0
- package/lib/slc/model-gen/concerto.decorator@1.0.0.js +5 -0
- package/lib/slc/model-gen/concerto.decorator@1.0.0.js.map +1 -0
- package/lib/slc/model-gen/concerto.js +5 -0
- package/lib/slc/model-gen/concerto.js.map +1 -0
- package/lib/slc/model-gen/concerto@1.0.0.d.ts +24 -0
- package/lib/slc/model-gen/concerto@1.0.0.js +6 -0
- package/lib/slc/model-gen/concerto@1.0.0.js.map +1 -0
- package/lib/slc/model-gen/org.accordproject.contract@0.2.0.d.ts +7 -0
- package/lib/slc/model-gen/org.accordproject.contract@0.2.0.js +5 -0
- package/lib/slc/model-gen/org.accordproject.contract@0.2.0.js.map +1 -0
- package/lib/slc/model-gen/org.accordproject.runtime@0.2.0.d.ts +15 -0
- package/lib/slc/model-gen/org.accordproject.runtime@0.2.0.js +4 -0
- package/lib/slc/model-gen/org.accordproject.runtime@0.2.0.js.map +1 -0
- package/lib/slc/model-gen/org.accordproject.time@0.3.0.d.ts +46 -0
- package/lib/slc/model-gen/org.accordproject.time@0.3.0.js +48 -0
- package/lib/slc/model-gen/org.accordproject.time@0.3.0.js.map +1 -0
- package/lib/utils.d.ts +6 -0
- package/lib/utils.js +71 -0
- package/lib/utils.js.map +1 -0
- package/lib/worker.d.ts +1 -0
- package/{dist → lib}/worker.js +12 -10
- package/lib/worker.js.map +1 -0
- package/package.json +37 -25
- package/umd/template-engine.js +13 -0
- package/umd/template-engine.js.LICENSE.txt +21 -0
- package/dist/index.d.ts +0 -174
- package/dist/index.js +0 -1244
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -1217
- package/dist/index.mjs.map +0 -1
- package/dist/worker.js.map +0 -1
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/drafting/Boolean/index.ts","../src/drafting/DateTime/index.ts","../src/drafting/Double/format.ts","../src/drafting/Double/index.ts","../src/drafting/Integer/format.ts","../src/drafting/Integer/index.ts","../src/drafting/Duration/index.ts","../src/drafting/Long/index.ts","../src/drafting/MonetaryAmount/currencycode.ts","../src/drafting/MonetaryAmount/index.ts","../src/drafting/String/index.ts","../src/drafting/index.ts","../src/TemplateMarkNodes.ts","../src/utils.ts","../src/TypeScriptCompilationContext.ts","../src/runtime/declarations.ts","../src/TypeScriptToJavaScriptCompiler.ts","../src/model-gen/org.accordproject.templatemark@0.5.0.ts","../src/TemplateMarkToJavaScriptCompiler.ts","../src/TypeScriptRuntime.ts","../src/JavaScriptEvaluator.ts","../src/TemplateMarkInterpreter.ts","../src/TemplateArchiveProcessor.ts"],"sourcesContent":["/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for Boolean\n * @param {Boolean} value the Boolean\n * @returns {string} the text\n */\nexport default function booleanDrafter(value:boolean) : string {\n if (value) {\n return 'true';\n } else {\n return 'false';\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport { DateTimeFormat } from '../DraftFormat';\ndayjs.extend(utc);\n\n/**\n * Creates a drafter for DateTime\n * @param {string} value the DateTime\n * @param {object} format the the format\n * @returns {string} the text\n */\nexport default function dateTimeDrafter(value:string,format?:DateTimeFormat) : string {\n const f = format ? format : 'MM/DD/YYYY';\n return dayjs.utc(value).format(f);\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {ToWords} from 'to-words';\nimport { NumberDraftFormat } from '../DraftFormat';\n/**\n * Creates a drafter for Double\n * @param {number} value - the double\n * @returns {string} the text\n */\nexport function draftDoubleIEEE(value:number) : string {\n if (Math.floor(value) === value) {\n return (new Number(value)).toFixed(1); // Make sure there is always decimal point\n } else {\n return '' + value;\n }\n}\n\n/**\n * Creates a drafter for a formatted Double\n * @param {number} value - the Double\n * @param {NumberDraftFormat} format - the format\n * @returns {string} formatted double value as string\n */\nexport function draftDoubleFormat(value:number,format:NumberDraftFormat) : string {\n if(format==='text') {\n const converter:ToWords = new ToWords();\n const res:string=converter.convert(value);\n return res;\n } else {\n return format.replace(/0(.)0((.)(0+))?/gi, function(_a,sep1,_b,sep2,digits){\n const len = digits ? digits.length : 0;\n const vs = value.toFixed(len);\n let res = '';\n if (sep2) {\n const d = vs.substring(vs.length - len);\n res += sep2 + d;\n }\n let i = vs.substring(0,vs.length - (len === 0 ? 0 : len+1));\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NumberDraftFormat } from '../DraftFormat';\nimport { draftDoubleIEEE } from './format';\nimport { draftDoubleFormat } from './format';\n\n/**\n * Creates a drafter for a double\n * @param {number} value - the Double\n * @param {NumberDraftFormat} format - the format\n * @returns {string} the text\n */\nexport default function doubleDrafter(value:number,format?:NumberDraftFormat) : string {\n if (format) {\n return draftDoubleFormat(value,format);\n } else {\n return draftDoubleIEEE(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ToWords} from 'to-words';\nimport { NumberDraftFormat } from '../DraftFormat';\n\n/**\n * Creates a drafter for Integer\n * @param {number} value - the integer\n * @returns {string} the text\n */\nexport function draftInteger(value:number) : string {\n return '' + value;\n}\n\n/**\n * Creates a drafter for a formatted Integer\n * @param {number} value - the Integer\n * @param {NumberDraftFormat} format - the format\n * @returns {string} formatted integer value as string\n */\nexport function draftIntegerFormat(value:number,format:NumberDraftFormat) : string {\n if (format === 'text') {\n const converter:ToWords = new ToWords();\n const res:string=converter.convert(value);\n return res;\n } else {\n return format.replace(/0(.)0/gi, function(_a,sep1){\n const vs = value.toFixed(0);\n let res = '';\n let i = vs.substring(0,vs.length);\n while (i.length > 3) {\n res = sep1 + i.substring(i.length - 3) + res;\n i = i.substring(0, i.length - 3);\n }\n return i + res;\n });\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use strict';\n\nimport { NumberDraftFormat } from '../DraftFormat';\nimport { draftInteger } from './format';\nimport { draftIntegerFormat } from './format';\n\n/**\n * Creates a drafter for an Integer\n * @param {number} value - the integer\n * @param {NumberDraftFormat} format - the format\n * @returns {string} the text\n */\nexport default function integerDrafter(value:number,format?:NumberDraftFormat) : string {\n if (format) {\n return draftIntegerFormat(value,format);\n } else {\n return draftInteger(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype Duration = {\n amount: number;\n unit: string;\n};\n\n/**\n * Type guard to check if a value is a valid Duration\n */\nfunction isDuration(value: unknown): value is Duration {\n return (\n value != null &&\n typeof value === 'object' &&\n 'amount' in value &&\n 'unit' in value &&\n typeof (value as Duration).amount === 'number' &&\n typeof (value as Duration).unit === 'string'\n );\n}\n\n/**\n * Creates a drafter for Duration/Period types\n * @param {unknown} value the duration or period (validated at runtime)\n * @returns {string} the text (e.g., \"2 days\")\n */\nexport default function durationDrafter(value: unknown): string {\n if (!isDuration(value)) {\n return '0 unknown';\n }\n\n return `${value.amount} ${value.unit}`;\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftInteger as draftLong } from '../Integer/format';\nimport { draftIntegerFormat as draftLongFormat } from '../Integer/format';\nimport { NumberDraftFormat } from '../DraftFormat';\n\n/**\n * Creates a drafter for a long\n * @param {number} value - the Long\n * @param {NumberDraftFormat} format - the format\n * @returns {string} the text\n */\nexport default function longDrafter(value:number,format?:NumberDraftFormat) : string {\n if (format) {\n return draftLongFormat(value,format);\n } else {\n return draftLong(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum CurrencyCode {\n 'USD' = '$',\n 'EUR'= '€',\n 'JPY'= '¥',\n 'GBP'= '£',\n 'AUD'= 'A$',\n 'CAD'= 'C$',\n 'CHF'= 'CHF',\n 'CNY'= '元',\n 'HKD'= 'HK$',\n 'NZD'= 'NZ$',\n 'KRW'= '₩',\n 'SGD'= 'S$',\n 'MXN'= 'MEX$',\n 'INR'= '₹',\n 'RUB'= '₽',\n 'ZAR'= 'R',\n 'TRY'= '₺',\n 'BRL'= 'R$',\n 'TWD'= 'NT$',\n 'PLN'= 'zł',\n 'THB'= '฿',\n 'IDR'= 'Rp',\n 'HUF'= 'Ft',\n 'CZK'= 'Kč',\n 'ILS'= '₪',\n 'CLP'= 'CLP$',\n 'PHP'= '₱',\n 'AED'= 'د.إ',\n 'COP'= 'COL$',\n 'SAR'= '﷼',\n 'MYR'= 'RM',\n 'RON'= 'L',\n 'BGN'= 'лв.'\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { draftDoubleIEEE } from '../Double/format';\nimport { draftDoubleFormat } from '../Double/format';\nimport { MonetaryAmountFormat } from '../DraftFormat';\nimport { CurrencyCode } from './currencycode';\n\ntype MonetaryAmount = {\n doubleValue: number;\n currencyCode: string;\n};\n\n/**\n * Creates a drafter for monetary amount with no format\n * @param {object} value the monetary amount\n * @returns {string} the text\n */\nfunction monetaryAmountDefaultDrafter(value:MonetaryAmount) {\n return '' + draftDoubleIEEE(value.doubleValue) + ' ' + value.currencyCode;\n}\n\n/**\n * Symbol from a currency code\n * @param {string} c - the currency code\n * @returns {string} the symbol\n */\nfunction codeSymbol(c:string) : string {\n const index: number = Object.keys(CurrencyCode).indexOf(c);\n if(index >=0) {\n return Object.values(CurrencyCode)[index];\n }\n else {\n return c;\n }\n}\n\n/**\n * Creates a drafter for monetary amount with a given format\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nfunction monetaryAmountFormatDrafter(value:MonetaryAmount,format:MonetaryAmountFormat) : string {\n return draftDoubleFormat(value.doubleValue,\n format\n .replace(/K/gi,codeSymbol(value.currencyCode))\n .replace(/CCC/gi,value.currencyCode));\n}\n\n/**\n * Creates a drafter for a monetary amount\n * @param {object} value the monetary amount\n * @param {string} format the format\n * @returns {string} the text\n */\nexport default function monetaryAmountDrafter(value:MonetaryAmount,format?:MonetaryAmountFormat) : string {\n if (format) {\n return monetaryAmountFormatDrafter(value,format);\n } else {\n return monetaryAmountDefaultDrafter(value);\n }\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a drafter for String\n * @param {object} value the String\n * @returns {string} the text\n */\nexport default function stringDrafter(value:string) : string {\n return value;\n}","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport booleanDrafter from './Boolean';\nimport dateTimeDrafter from './DateTime';\nimport doubleDrafter from './Double';\nimport integerDrafter from './Integer';\nimport durationDrafter from './Duration';\nimport longDrafter from './Long';\nimport monetaryAmountDrafter from './MonetaryAmount';\nimport { DraftFormat } from './DraftFormat';\nimport stringDrafter from './String';\n\nexport function getDrafter(typeName: string) : ((value:any, format?:DraftFormat) => string)|null {\n switch(typeName) {\n case 'Boolean': return booleanDrafter;\n case 'DateTime': return dateTimeDrafter;\n case 'Double': return doubleDrafter;\n case 'Integer': return integerDrafter;\n case 'Long': return longDrafter;\n case 'org.accordproject.money@0.3.0.MonetaryAmount': return monetaryAmountDrafter;\n case 'org.accordproject.time@0.3.0.Duration': return durationDrafter;\n case 'org.accordproject.time@0.3.0.Period': return durationDrafter;\n case 'String': return stringDrafter;\n default: return null;\n }\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\n\n// use to create agreementmark from templatemark\nexport const TEMPLATEMARK_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.(\\w+)Definition$/;\nexport const FORMULA_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormulaDefinition$/;\nexport const VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.VariableDefinition$/;\nexport const CONDITIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ConditionalDefinition$/;\nexport const ENUM_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.EnumVariableDefinition$/;\nexport const FORMATTED_VARIABLE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.FormattedVariableDefinition$/;\nexport const WITH_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.WithDefinition$/;\nexport const LISTBLOCK_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ListBlockDefinition$/;\nexport const JOIN_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.JoinDefinition$/;\nexport const OPTIONAL_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.OptionalDefinition$/;\nexport const CLAUSE_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ClauseDefinition$/;\nexport const CONTRACT_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ContractDefinition$/;\nexport const FOREACH_DEFINITION_RE = /^(org\\.accordproject\\.templatemark)@(.+)\\.ForeachDefinition$/;\n\nexport type TemplateData = Record<string, unknown>;\n\n/**\n * TemplateMark nodes that implicitly change the data access scope\n * by specifying the name of a property on the node.\n */\nexport const NAVIGATION_NODES = [\n `${TemplateMarkModel.NAMESPACE}.ListBlockDefinition`,\n `${TemplateMarkModel.NAMESPACE}.WithDefinition`,\n `${TemplateMarkModel.NAMESPACE}.JoinDefinition`,\n `${TemplateMarkModel.NAMESPACE}.OptionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ContractDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ForeachBlockDefinition`\n];\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { ClassDeclaration, Introspector, ModelManager, Property } from '@accordproject/concerto-core';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { templatemarkutil } from '@accordproject/markdown-template';\n\nimport { existsSync, mkdirSync, rmSync } from 'fs';\nimport traverse from 'traverse';\n\nexport function ensureDirSync(path:string) {\n if(!existsSync(path)) {\n mkdirSync(path, { recursive: true });\n }\n}\n\nexport function removeSync(path:string) {\n rmSync(path, { recursive: true, force: true });\n}\n\nexport function writeFunctionToString(templateClass:ClassDeclaration, functionName: string, returnType: string, code: string): string {\n let result = '';\n result += '/// ---cut---\\n';\n result += `export function ${functionName}(data:TemplateModel.I${templateClass.getName()}, library:any, options:GenerationOptions) : ${returnType} {\\n`;\n result += ' const now = dayjs(options?.now);\\n';\n result += ' const locale = options?.locale;\\n';\n templateClass.getProperties().forEach((p: Property) => {\n result += ` const ${p.getName()} = data.${p.getName()};\\n`;\n });\n result += ' ' + code.trim() + '\\n';\n result += '}\\n';\n result += '\\n';\n\n return result;\n}\n\nexport function nameUserCode(templateMarkDom: any) {\n return traverse(templateMarkDom).map(function (x) {\n if (x && ((x.$class === `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition` && x.condition) ||\n (x.$class === `${TemplateMarkModel.NAMESPACE}.ClauseDefinition` && x.condition))) {\n x.functionName = `condition_${this.path.join('_')}`;\n }\n this.update(x);\n });\n}\n\nexport function getTemplateClassDeclaration(modelManager: ModelManager, templateConceptFqn?: string) : ClassDeclaration {\n const introspector = new Introspector(modelManager);\n try {\n return templatemarkutil.findTemplateConcept(introspector, 'clause', templateConceptFqn);\n }\n catch(err) {\n console.log(err);\n throw err;\n }\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { CodeGen } from '@accordproject/concerto-codegen';\nimport { InMemoryWriter } from '@accordproject/concerto-util';\nimport { getTemplateClassDeclaration } from './utils';\n\n/**\n * This class creates the typescript types\n * required to compile Typescript expressions (used in\n * formulae, conditions and clauses) to JavaScript. It uses\n * these to create a compilation context for '@typescript/twoslash'\n * which is used to compile the typescript code.\n */\nexport class TypeScriptCompilationContext {\n\n modelManager:ModelManager;\n templateClass:ClassDeclaration;\n\n constructor(modelManager:ModelManager,templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.templateClass = getTemplateClassDeclaration(this.modelManager, templateConceptFqn);\n }\n\n getTypeScriptFiles() : Record<string,string> {\n const result:Record<string,string> = {};\n\n const visitor = new CodeGen.TypescriptVisitor();\n const writer = new InMemoryWriter();\n\n const params = {\n fileWriter: writer\n };\n this.modelManager.accept(visitor, params);\n writer.getFilesInMemory().forEach( (value: string, key: string) => {\n result[key] = value;\n });\n return result;\n }\n\n getCompilationContext() : string {\n const files = this.getTypeScriptFiles();\n\n let result = '';\n\n Object.keys(files).forEach( key => {\n const content = files[key];\n result += `\n// @filename: ${key}\n${content}\n`;\n });\n\n result += `\n// @filename: code.ts\nimport * as TemplateModel from './${this.templateClass.getNamespace()}';\nimport dayjs from 'dayjs';\nimport jp from 'jsonpath';\n\ntype GenerationOptions = {\n now?:string,\n locale?:string\n}\n`;\n return result;\n }\n}\n","\n/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable quotes */\n// file generated by ./scripts/updateRuntimeDependencies.js\n\n\nexport const DAYJS_BASE64 = 'Ly8vIDxyZWZlcmVuY2UgcGF0aD0iLi9sb2NhbGUvaW5kZXguZC50cyIgLz4KCmV4cG9ydCA9IGRheWpzOwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUpOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIHN0cmljdD86IGJvb2xlYW4pOiBkYXlqcy5EYXlqcwoKZGVjbGFyZSBmdW5jdGlvbiBkYXlqcyAoZGF0ZT86IGRheWpzLkNvbmZpZ1R5cGUsIGZvcm1hdD86IGRheWpzLk9wdGlvblR5cGUsIGxvY2FsZT86IHN0cmluZywgc3RyaWN0PzogYm9vbGVhbik6IGRheWpzLkRheWpzCgpkZWNsYXJlIG5hbWVzcGFjZSBkYXlqcyB7CiAgaW50ZXJmYWNlIENvbmZpZ1R5cGVNYXAgewogICAgZGVmYXVsdDogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IERheWpzIHwgbnVsbCB8IHVuZGVmaW5lZAogIH0KCiAgZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IENvbmZpZ1R5cGVNYXBba2V5b2YgQ29uZmlnVHlwZU1hcF0KCiAgZXhwb3J0IGludGVyZmFjZSBGb3JtYXRPYmplY3QgeyBsb2NhbGU/OiBzdHJpbmcsIGZvcm1hdD86IHN0cmluZywgdXRjPzogYm9vbGVhbiB9CgogIGV4cG9ydCB0eXBlIE9wdGlvblR5cGUgPSBGb3JtYXRPYmplY3QgfCBzdHJpbmcgfCBzdHJpbmdbXQoKICBleHBvcnQgdHlwZSBVbml0VHlwZVNob3J0ID0gJ2QnIHwgJ0QnIHwgJ00nIHwgJ3knIHwgJ2gnIHwgJ20nIHwgJ3MnIHwgJ21zJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmcgPSAnbWlsbGlzZWNvbmQnIHwgJ3NlY29uZCcgfCAnbWludXRlJyB8ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyB8ICdkYXRlJwoKICBleHBvcnQgdHlwZSBVbml0VHlwZUxvbmdQbHVyYWwgPSAnbWlsbGlzZWNvbmRzJyB8ICdzZWNvbmRzJyB8ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnbW9udGhzJyB8ICd5ZWFycycgfCAnZGF0ZXMnCiAgCiAgZXhwb3J0IHR5cGUgVW5pdFR5cGUgPSBVbml0VHlwZUxvbmcgfCBVbml0VHlwZUxvbmdQbHVyYWwgfCBVbml0VHlwZVNob3J0OwoKICBleHBvcnQgdHlwZSBPcFVuaXRUeXBlID0gVW5pdFR5cGUgfCAid2VlayIgfCAid2Vla3MiIHwgJ3cnOwogIGV4cG9ydCB0eXBlIFFVbml0VHlwZSA9IFVuaXRUeXBlIHwgInF1YXJ0ZXIiIHwgInF1YXJ0ZXJzIiB8ICdRJzsKICBleHBvcnQgdHlwZSBNYW5pcHVsYXRlVHlwZSA9IEV4Y2x1ZGU8T3BVbml0VHlwZSwgJ2RhdGUnIHwgJ2RhdGVzJz47CiAgY2xhc3MgRGF5anMgewogICAgY29uc3RydWN0b3IgKGNvbmZpZz86IENvbmZpZ1R5cGUpCiAgICAvKioKICAgICAqIEFsbCBEYXkuanMgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLiBTdGlsbCwgYGRheWpzI2Nsb25lYCBjYW4gY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGlmIHlvdSBuZWVkIG9uZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5jbG9uZSgpLy8gPT4gRGF5anMKICAgICAqIGRheWpzKGRheWpzKCcyMDE5LTAxLTI1JykpIC8vIHBhc3NpbmcgYSBEYXlqcyBvYmplY3QgdG8gYSBjb25zdHJ1Y3RvciB3aWxsIGFsc28gY2xvbmUgaXQKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvZGF5anMtY2xvbmUKICAgICAqLwogICAgY2xvbmUoKTogRGF5anMKICAgIC8qKgogICAgICogVGhpcyByZXR1cm5zIGEgYGJvb2xlYW5gIGluZGljYXRpbmcgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBjb250YWlucyBhIHZhbGlkIGRhdGUgb3Igbm90LgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzVmFsaWQoKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcGFyc2UvaXMtdmFsaWQKICAgICAqLwogICAgaXNWYWxpZCgpOiBib29sZWFuCiAgICAvKioKICAgICAqIEdldCB0aGUgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS55ZWFyKCkvLyA9PiAyMDIwCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHllYXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkueWVhcigyMDAwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQveWVhcgogICAgICovCiAgICB5ZWFyKHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1vbnRoLgogICAgICoKICAgICAqIE1vbnRocyBhcmUgemVybyBpbmRleGVkLCBzbyBKYW51YXJ5IGlzIG1vbnRoIDAuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkubW9udGgoKS8vID0+IDAtMTEKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9tb250aAogICAgICovCiAgICBtb250aCgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBtb250aC4KICAgICAqCiAgICAgKiBNb250aHMgYXJlIHplcm8gaW5kZXhlZCwgc28gSmFudWFyeSBpcyBtb250aCAwLgogICAgICoKICAgICAqIEFjY2VwdHMgbnVtYmVycyBmcm9tIDAgdG8gMTEuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gdGhlIG5leHQgeWVhci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5tb250aCgwKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbW9udGgKICAgICAqLwogICAgbW9udGgodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF0ZSBvZiB0aGUgbW9udGguCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZGF0ZSgpLy8gPT4gMS0zMQogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2RhdGUKICAgICAqLwogICAgZGF0ZSgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXRlIG9mIHRoZSBtb250aC4KICAgICAqCiAgICAgKiBBY2NlcHRzIG51bWJlcnMgZnJvbSAxIHRvIDMxLiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIHRoZSBuZXh0IG1vbnRocy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5kYXRlKDEpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9kYXRlCiAgICAgKi8KICAgIGRhdGUodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrLgogICAgICoKICAgICAqIFJldHVybnMgbnVtYmVycyBmcm9tIDAgKFN1bmRheSkgdG8gNiAoU2F0dXJkYXkpLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmRheSgpLy8gMC02CiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvZGF5CiAgICAgKi8KICAgIGRheSgpOiAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2CiAgICAvKioKICAgICAqIFNldCB0aGUgZGF5IG9mIHRoZSB3ZWVrLgogICAgICoKICAgICAqIEFjY2VwdHMgbnVtYmVycyBmcm9tIDAgKFN1bmRheSkgdG8gNiAoU2F0dXJkYXkpLiBJZiB0aGUgcmFuZ2UgaXMgZXhjZWVkZWQsIGl0IHdpbGwgYnViYmxlIHVwIHRvIG5leHQgd2Vla3MuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZGF5KDApLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9kYXkKICAgICAqLwogICAgZGF5KHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBHZXQgdGhlIGhvdXIuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuaG91cigpLy8gPT4gMC0yMwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L2hvdXIKICAgICAqLwogICAgaG91cigpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBob3VyLgogICAgICoKICAgICAqIEFjY2VwdHMgbnVtYmVycyBmcm9tIDAgdG8gMjMuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gdGhlIG5leHQgZGF5LgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmhvdXIoMTIpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9ob3VyCiAgICAgKi8KICAgIGhvdXIodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgbWludXRlcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5taW51dGUoKS8vID0+IDAtNTkKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9taW51dGUKICAgICAqLwogICAgbWludXRlKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1pbnV0ZXMuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCB0byA1OS4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBob3VyLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLm1pbnV0ZSg1OSkvLyA9PiBEYXlqcwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9nZXQtc2V0L21pbnV0ZQogICAgICovCiAgICBtaW51dGUodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdldCB0aGUgc2Vjb25kcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5zZWNvbmQoKS8vID0+IDAtNTkKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9zZWNvbmQKICAgICAqLwogICAgc2Vjb25kKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHNlY29uZHMuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCB0byA1OS4gSWYgdGhlIHJhbmdlIGlzIGV4Y2VlZGVkLCBpdCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgbmV4dCBtaW51dGVzLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnNlY29uZCgxKS8vIERheWpzCiAgICAgKiBgYGAKICAgICAqLwogICAgc2Vjb25kKHZhbHVlOiBudW1iZXIpOiBEYXlqcwogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5taWxsaXNlY29uZCgpLy8gPT4gMC05OTkKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9taWxsaXNlY29uZAogICAgICovCiAgICBtaWxsaXNlY29uZCgpOiBudW1iZXIKICAgIC8qKgogICAgICogU2V0IHRoZSBtaWxsaXNlY29uZHMuCiAgICAgKgogICAgICogQWNjZXB0cyBudW1iZXJzIGZyb20gMCB0byA5OTkuIElmIHRoZSByYW5nZSBpcyBleGNlZWRlZCwgaXQgd2lsbCBidWJibGUgdXAgdG8gdGhlIG5leHQgc2Vjb25kcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5taWxsaXNlY29uZCgxKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvbWlsbGlzZWNvbmQKICAgICAqLwogICAgbWlsbGlzZWNvbmQodmFsdWU6IG51bWJlcik6IERheWpzCiAgICAvKioKICAgICAqIEdlbmVyaWMgc2V0dGVyLCBhY2NlcHRpbmcgdW5pdCBhcyBmaXJzdCBhcmd1bWVudCwgYW5kIHZhbHVlIGFzIHNlY29uZCwgcmV0dXJucyBhIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBhcHBsaWVkIGNoYW5nZXMuCiAgICAgKgogICAgICogSW4gZ2VuZXJhbDoKICAgICAqIGBgYAogICAgICogZGF5anMoKS5zZXQodW5pdCwgdmFsdWUpID09PSBkYXlqcygpW3VuaXRdKHZhbHVlKQogICAgICogYGBgCiAgICAgKiBVbml0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgYW5kIHN1cHBvcnQgcGx1cmFsIGFuZCBzaG9ydCBmb3Jtcy4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5zZXQoJ2RhdGUnLCAxKQogICAgICogZGF5anMoKS5zZXQoJ21vbnRoJywgMykgLy8gQXByaWwKICAgICAqIGRheWpzKCkuc2V0KCdzZWNvbmQnLCAzMCkKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZ2V0LXNldC9zZXQKICAgICAqLwogICAgc2V0KHVuaXQ6IFVuaXRUeXBlLCB2YWx1ZTogbnVtYmVyKTogRGF5anMKICAgIC8qKgogICAgICogU3RyaW5nIGdldHRlciwgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBpbmZvcm1hdGlvbiBnZXR0aW5nIGZyb20gRGF5LmpzIG9iamVjdC4KICAgICAqCiAgICAgKiBJbiBnZW5lcmFsOgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmdldCh1bml0KSA9PT0gZGF5anMoKVt1bml0XSgpCiAgICAgKiBgYGAKICAgICAqIFVuaXRzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCBhbmQgc3VwcG9ydCBwbHVyYWwgYW5kIHNob3J0IGZvcm1zLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmdldCgneWVhcicpCiAgICAgKiBkYXlqcygpLmdldCgnbW9udGgnKSAvLyBzdGFydCAwCiAgICAgKiBkYXlqcygpLmdldCgnZGF0ZScpCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2dldC1zZXQvZ2V0CiAgICAgKi8KICAgIGdldCh1bml0OiBVbml0VHlwZSk6IG51bWJlcgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xvbmVkIERheS5qcyBvYmplY3Qgd2l0aCBhIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZSBhZGRlZC4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5hZGQoNywgJ2RheScpLy8gPT4gRGF5anMKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS9hZGQKICAgICAqLwogICAgYWRkKHZhbHVlOiBudW1iZXIsIHVuaXQ/OiBNYW5pcHVsYXRlVHlwZSk6IERheWpzCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjbG9uZWQgRGF5LmpzIG9iamVjdCB3aXRoIGEgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lIHN1YnRyYWN0ZWQuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuc3VidHJhY3QoNywgJ3llYXInKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIFVuaXRzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCBhbmQgc3VwcG9ydCBwbHVyYWwgYW5kIHNob3J0IGZvcm1zLgogICAgICoKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL21hbmlwdWxhdGUvc3VidHJhY3QKICAgICAqLwogICAgc3VidHJhY3QodmFsdWU6IG51bWJlciwgdW5pdD86IE1hbmlwdWxhdGVUeXBlKTogRGF5anMKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNsb25lZCBEYXkuanMgb2JqZWN0IGFuZCBzZXQgaXQgdG8gdGhlIHN0YXJ0IG9mIGEgdW5pdCBvZiB0aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLnN0YXJ0T2YoJ3llYXInKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIFVuaXRzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCBhbmQgc3VwcG9ydCBwbHVyYWwgYW5kIHNob3J0IGZvcm1zLgogICAgICoKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL21hbmlwdWxhdGUvc3RhcnQtb2YKICAgICAqLwogICAgc3RhcnRPZih1bml0OiBPcFVuaXRUeXBlKTogRGF5anMKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNsb25lZCBEYXkuanMgb2JqZWN0IGFuZCBzZXQgaXQgdG8gdGhlIGVuZCBvZiBhIHVuaXQgb2YgdGltZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5lbmRPZignbW9udGgnKS8vID0+IERheWpzCiAgICAgKiBgYGAKICAgICAqIFVuaXRzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCBhbmQgc3VwcG9ydCBwbHVyYWwgYW5kIHNob3J0IGZvcm1zLgogICAgICoKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL21hbmlwdWxhdGUvZW5kLW9mCiAgICAgKi8KICAgIGVuZE9mKHVuaXQ6IE9wVW5pdFR5cGUpOiBEYXlqcwogICAgLyoqCiAgICAgKiBHZXQgdGhlIGZvcm1hdHRlZCBkYXRlIGFjY29yZGluZyB0byB0aGUgc3RyaW5nIG9mIHRva2VucyBwYXNzZWQgaW4uCiAgICAgKgogICAgICogVG8gZXNjYXBlIGNoYXJhY3RlcnMsIHdyYXAgdGhlbSBpbiBzcXVhcmUgYnJhY2tldHMgKGUuZy4gW01NXSkuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkuZm9ybWF0KCkvLyA9PiBjdXJyZW50IGRhdGUgaW4gSVNPODYwMSwgd2l0aG91dCBmcmFjdGlvbiBzZWNvbmRzIGUuZy4gJzIwMjAtMDQtMDJUMDg6MDI6MTctMDU6MDAnCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLmZvcm1hdCgnW1lZWVllc2NhcGVdIFlZWVktTU0tRERUSEg6bW06c3NaW1pdJykvLyAnWVlZWWVzY2FwZSAyMDE5LTAxLTI1VDAwOjAwOjAwLTAyOjAwWicKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykuZm9ybWF0KCdERC9NTS9ZWVlZJykgLy8gJzI1LzAxLzIwMTknCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL2Rpc3BsYXkvZm9ybWF0CiAgICAgKi8KICAgIGZvcm1hdCh0ZW1wbGF0ZT86IHN0cmluZyk6IHN0cmluZwogICAgLyoqCiAgICAgKiBUaGlzIGluZGljYXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRlLXRpbWUgaW4gdGhlIHNwZWNpZmllZCB1bml0LgogICAgICoKICAgICAqIFRvIGdldCB0aGUgZGlmZmVyZW5jZSBpbiBtaWxsaXNlY29uZHMsIHVzZSBgZGF5anMjZGlmZmAKICAgICAqIGBgYAogICAgICogY29uc3QgZGF0ZTEgPSBkYXlqcygnMjAxOS0wMS0yNScpCiAgICAgKiBjb25zdCBkYXRlMiA9IGRheWpzKCcyMDE4LTA2LTA1JykKICAgICAqIGRhdGUxLmRpZmYoZGF0ZTIpIC8vIDIwMjE0MDAwMDAwIGRlZmF1bHQgbWlsbGlzZWNvbmRzCiAgICAgKiBkYXRlMS5kaWZmKCkgLy8gbWlsbGlzZWNvbmRzIHRvIGN1cnJlbnQgdGltZQogICAgICogYGBgCiAgICAgKgogICAgICogVG8gZ2V0IHRoZSBkaWZmZXJlbmNlIGluIGFub3RoZXIgdW5pdCBvZiBtZWFzdXJlbWVudCwgcGFzcyB0aGF0IG1lYXN1cmVtZW50IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuCiAgICAgKiBgYGAKICAgICAqIGNvbnN0IGRhdGUxID0gZGF5anMoJzIwMTktMDEtMjUnKQogICAgICogZGF0ZTEuZGlmZignMjAxOC0wNi0wNScsICdtb250aCcpIC8vIDcKICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZGlzcGxheS9kaWZmZXJlbmNlCiAgICAgKi8KICAgIGRpZmYoZGF0ZT86IENvbmZpZ1R5cGUsIHVuaXQ/OiBRVW5pdFR5cGUgfCBPcFVuaXRUeXBlLCBmbG9hdD86IGJvb2xlYW4pOiBudW1iZXIKICAgIC8qKgogICAgICogVGhpcyByZXR1cm5zIHRoZSBudW1iZXIgb2YgKiptaWxsaXNlY29uZHMqKiBzaW5jZSB0aGUgVW5peCBFcG9jaCBvZiB0aGUgRGF5LmpzIG9iamVjdC4KICAgICAqIGBgYAogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS52YWx1ZU9mKCkgLy8gMTU0ODM4MTYwMDAwMAogICAgICogK2RheWpzKDE1NDgzODE2MDAwMDApIC8vIDE1NDgzODE2MDAwMDAKICAgICAqIGBgYAogICAgICogVG8gZ2V0IGEgVW5peCB0aW1lc3RhbXAgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gpIGZyb20gYSBEYXkuanMgb2JqZWN0LCB5b3Ugc2hvdWxkIHVzZSBVbml4IFRpbWVzdGFtcCBgZGF5anMjdW5peCgpYC4KICAgICAqCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L3VuaXgtdGltZXN0YW1wLW1pbGxpc2Vjb25kcwogICAgICovCiAgICB2YWx1ZU9mKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBUaGlzIHJldHVybnMgdGhlIFVuaXggdGltZXN0YW1wICh0aGUgbnVtYmVyIG9mICoqc2Vjb25kcyoqIHNpbmNlIHRoZSBVbml4IEVwb2NoKSBvZiB0aGUgRGF5LmpzIG9iamVjdC4KICAgICAqIGBgYAogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS51bml4KCkgLy8gMTU0ODM4MTYwMAogICAgICogYGBgCiAgICAgKiBUaGlzIHZhbHVlIGlzIGZsb29yZWQgdG8gdGhlIG5lYXJlc3Qgc2Vjb25kLCBhbmQgZG9lcyBub3QgaW5jbHVkZSBhIG1pbGxpc2Vjb25kcyBjb21wb25lbnQuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZGlzcGxheS91bml4LXRpbWVzdGFtcAogICAgICovCiAgICB1bml4KCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBjdXJyZW50IG1vbnRoLgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLmRheXNJbk1vbnRoKCkgLy8gMzEKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZGlzcGxheS9kYXlzLWluLW1vbnRoCiAgICAgKi8KICAgIGRheXNJbk1vbnRoKCk6IG51bWJlcgogICAgLyoqCiAgICAgKiBUbyBnZXQgYSBjb3B5IG9mIHRoZSBuYXRpdmUgYERhdGVgIG9iamVjdCBwYXJzZWQgZnJvbSB0aGUgRGF5LmpzIG9iamVjdCB1c2UgYGRheWpzI3RvRGF0ZWAuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCcyMDE5LTAxLTI1JykudG9EYXRlKCkvLyA9PiBEYXRlCiAgICAgKiBgYGAKICAgICAqLwogICAgdG9EYXRlKCk6IERhdGUKICAgIC8qKgogICAgICogVG8gc2VyaWFsaXplIGFzIGFuIElTTyA4NjAxIHN0cmluZy4KICAgICAqIGBgYAogICAgICogZGF5anMoJzIwMTktMDEtMjUnKS50b0pTT04oKSAvLyAnMjAxOS0wMS0yNVQwMjowMDowMC4wMDBaJwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2FzLWpzb24KICAgICAqLwogICAgdG9KU09OKCk6IHN0cmluZwogICAgLyoqCiAgICAgKiBUbyBmb3JtYXQgYXMgYW4gSVNPIDg2MDEgc3RyaW5nLgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnRvSVNPU3RyaW5nKCkgLy8gJzIwMTktMDEtMjVUMDI6MDA6MDAuMDAwWicKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vZGlzcGxheS9hcy1pc28tc3RyaW5nCiAgICAgKi8KICAgIHRvSVNPU3RyaW5nKCk6IHN0cmluZwogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlLgogICAgICogYGBgCiAgICAgKiBkYXlqcygnMjAxOS0wMS0yNScpLnRvU3RyaW5nKCkgLy8gJ0ZyaSwgMjUgSmFuIDIwMTkgMDI6MDA6MDAgR01UJwogICAgICogYGBgCiAgICAgKiBEb2NzOiBodHRwczovL2RheS5qcy5vcmcvZG9jcy9lbi9kaXNwbGF5L2FzLXN0cmluZwogICAgICovCiAgICB0b1N0cmluZygpOiBzdHJpbmcKICAgIC8qKgogICAgICogR2V0IHRoZSBVVEMgb2Zmc2V0IGluIG1pbnV0ZXMuCiAgICAgKiBgYGAKICAgICAqIGRheWpzKCkudXRjT2Zmc2V0KCkKICAgICAqIGBgYAogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vbWFuaXB1bGF0ZS91dGMtb2Zmc2V0CiAgICAgKi8KICAgIHV0Y09mZnNldCgpOiBudW1iZXIKICAgIC8qKgogICAgICogVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBpcyBiZWZvcmUgdGhlIG90aGVyIHN1cHBsaWVkIGRhdGUtdGltZS4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc0JlZm9yZShkYXlqcygnMjAxMS0wMS0wMScpKSAvLyBkZWZhdWx0IG1pbGxpc2Vjb25kcwogICAgICogYGBgCiAgICAgKiBJZiB5b3Ugd2FudCB0byBsaW1pdCB0aGUgZ3JhbnVsYXJpdHkgdG8gYSB1bml0IG90aGVyIHRoYW4gbWlsbGlzZWNvbmRzLCBwYXNzIGl0IGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQmVmb3JlKCcyMDExLTAxLTAxJywgJ3llYXInKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcXVlcnkvaXMtYmVmb3JlCiAgICAgKi8KICAgIGlzQmVmb3JlKGRhdGU/OiBDb25maWdUeXBlLCB1bml0PzogT3BVbml0VHlwZSk6IGJvb2xlYW4KICAgIC8qKgogICAgICogVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb3RoZXIgc3VwcGxpZWQgZGF0ZS10aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzU2FtZShkYXlqcygnMjAxMS0wMS0wMScpKSAvLyBkZWZhdWx0IG1pbGxpc2Vjb25kcwogICAgICogYGBgCiAgICAgKiBJZiB5b3Ugd2FudCB0byBsaW1pdCB0aGUgZ3JhbnVsYXJpdHkgdG8gYSB1bml0IG90aGVyIHRoYW4gbWlsbGlzZWNvbmRzLCBwYXNzIGl0IGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzU2FtZSgnMjAxMS0wMS0wMScsICd5ZWFyJykvLyA9PiBib29sZWFuCiAgICAgKiBgYGAKICAgICAqIERvY3M6IGh0dHBzOi8vZGF5LmpzLm9yZy9kb2NzL2VuL3F1ZXJ5L2lzLXNhbWUKICAgICAqLwogICAgaXNTYW1lKGRhdGU/OiBDb25maWdUeXBlLCB1bml0PzogT3BVbml0VHlwZSk6IGJvb2xlYW4KICAgIC8qKgogICAgICogVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgRGF5LmpzIG9iamVjdCBpcyBhZnRlciB0aGUgb3RoZXIgc3VwcGxpZWQgZGF0ZS10aW1lLgogICAgICogYGBgCiAgICAgKiBkYXlqcygpLmlzQWZ0ZXIoZGF5anMoJzIwMTEtMDEtMDEnKSkgLy8gZGVmYXVsdCBtaWxsaXNlY29uZHMKICAgICAqIGBgYAogICAgICogSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIGdyYW51bGFyaXR5IHRvIGEgdW5pdCBvdGhlciB0aGFuIG1pbGxpc2Vjb25kcywgcGFzcyBpdCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KICAgICAqIGBgYAogICAgICogZGF5anMoKS5pc0FmdGVyKCcyMDExLTAxLTAxJywgJ3llYXInKS8vID0+IGJvb2xlYW4KICAgICAqIGBgYAogICAgICogVW5pdHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGFuZCBzdXBwb3J0IHBsdXJhbCBhbmQgc2hvcnQgZm9ybXMuCiAgICAgKgogICAgICogRG9jczogaHR0cHM6Ly9kYXkuanMub3JnL2RvY3MvZW4vcXVlcnkvaXMtYWZ0ZXIKICAgICAqLwogICAgaXNBZnRlcihkYXRlPzogQ29uZmlnVHlwZSwgdW5pdD86IE9wVW5pdFR5cGUpOiBib29sZWFuCgogICAgbG9jYWxlKCk6IHN0cmluZwoKICAgIGxvY2FsZShwcmVzZXQ6IHN0cmluZyB8IElMb2NhbGUsIG9iamVjdD86IFBhcnRpYWw8SUxvY2FsZT4pOiBEYXlqcwogIH0KCiAgZXhwb3J0IHR5cGUgUGx1Z2luRnVuYzxUID0gdW5rbm93bj4gPSAob3B0aW9uOiBULCBjOiB0eXBlb2YgRGF5anMsIGQ6IHR5cGVvZiBkYXlqcykgPT4gdm9pZAoKICBleHBvcnQgZnVuY3Rpb24gZXh0ZW5kPFQgPSB1bmtub3duPihwbHVnaW46IFBsdWdpbkZ1bmM8VD4sIG9wdGlvbj86IFQpOiBEYXlqcwoKICBleHBvcnQgZnVuY3Rpb24gbG9jYWxlKHByZXNldD86IHN0cmluZyB8IElMb2NhbGUsIG9iamVjdD86IFBhcnRpYWw8SUxvY2FsZT4sIGlzTG9jYWw/OiBib29sZWFuKTogc3RyaW5nCgogIGV4cG9ydCBmdW5jdGlvbiBpc0RheWpzKGQ6IGFueSk6IGQgaXMgRGF5anMKCiAgZXhwb3J0IGZ1bmN0aW9uIHVuaXgodDogbnVtYmVyKTogRGF5anMKCiAgY29uc3QgTHMgOiB7IFtrZXk6IHN0cmluZ10gOiAgSUxvY2FsZSB9Cn0K';\nexport const JSONPATH_BASE64 = 'dHlwZSBQYXRoQ29tcG9uZW50ID0gc3RyaW5nIHwgbnVtYmVyOwoKLyoqCiAqIEZpbmQgZWxlbWVudHMgaW4gYG9iamAgbWF0Y2hpbmcgYHBhdGhFeHByZXNzaW9uYC4gUmV0dXJucyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0CiAqIHNhdGlzZnkgdGhlIHByb3ZpZGVkIEpTT05QYXRoIGV4cHJlc3Npb24sb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSB3ZXJlIG1hdGNoZWQuCiAqIFJldHVybnMgb25seSBmaXJzdCBgY291bnRgIGVsZW1lbnRzIGlmIHNwZWNpZmllZC4KICovCmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHF1ZXJ5KG9iajogYW55LCBwYXRoRXhwcmVzc2lvbjogc3RyaW5nLCBjb3VudD86IG51bWJlcik6IGFueVtdOwoKLyoqCiAqIEZpbmQgcGF0aHMgdG8gZWxlbWVudHMgaW4gYG9iamAgbWF0Y2hpbmcgYHBhdGhFeHByZXNzaW9uYC4gUmV0dXJucyBhbiBhcnJheSBvZgogKiBlbGVtZW50IHBhdGhzIHRoYXQgc2F0aXNmeSB0aGUgcHJvdmlkZWQgSlNPTlBhdGggZXhwcmVzc2lvbi4gRWFjaCBwYXRoIGlzIGl0c2VsZiBhbgogKiBhcnJheSBvZiBrZXlzIHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gd2l0aGluIGBvYmpgIG9mIHRoZSBtYXRjaGluZyBlbGVtZW50LiBSZXR1cm5zCiAqIG9ubHkgZmlyc3QgYGNvdW50YCBwYXRocyBpZiBzcGVjaWZpZWQuCiAqLwpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXRocyhvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiBQYXRoQ29tcG9uZW50W11bXTsKCi8qKgogKiBGaW5kIGVsZW1lbnRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHBhdGhzIGluIGBvYmpgIG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuCiAqIFJldHVybnMgYW4gYXJyYXkgb2Ygbm9kZSBvYmplY3RzIHdoZXJlIGVhY2ggbm9kZSBoYXMgYSBgcGF0aGAgY29udGFpbmluZyBhbiBhcnJheSBvZgogKiBrZXlzIHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gd2l0aGluIGBvYmpgLCBhbmQgYSBgdmFsdWVgIHBvaW50aW5nIHRvIHRoZSBtYXRjaGVkCiAqIGVsZW1lbnQuIFJldHVybnMgb25seSBmaXJzdCBgY291bnRgIG5vZGVzIGlmIHNwZWNpZmllZC4KICovCmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG5vZGVzKAogICAgb2JqOiBhbnksCiAgICBwYXRoRXhwcmVzc2lvbjogc3RyaW5nLAogICAgY291bnQ/OiBudW1iZXIsCik6IEFycmF5PHsgcGF0aDogUGF0aENvbXBvbmVudFtdOyB2YWx1ZTogYW55IH0+OwoKLyoqCiAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IG1hdGNoaW5nIGBwYXRoRXhwcmVzc2lvbmAuIElmIGBuZXdWYWx1ZWAgaXMKICogcHJvdmlkZWQsIHNldHMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGFuZCByZXR1cm5zIHRoZSBuZXcgdmFsdWUuCiAqLwpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB2YWx1ZShvYmo6IGFueSwgcGF0aEV4cHJlc3Npb246IHN0cmluZyk6IGFueTsKZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsdWU8VD4ob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcsIG5ld1ZhbHVlOiBUKTogVDsKCi8qKgogKiBSZXR1cm5zIHRoZSBwYXJlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQuCiAqLwpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJlbnQob2JqOiBhbnksIHBhdGhFeHByZXNzaW9uOiBzdHJpbmcpOiBhbnk7CgovKioKICogUnVucyB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gYGZuYCBvbiBlYWNoIG1hdGNoaW5nIGVsZW1lbnQsIGFuZCByZXBsYWNlcyBlYWNoCiAqIG1hdGNoaW5nIGVsZW1lbnQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0aGUKICogdmFsdWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgYXMgaXRzIG9ubHkgcGFyYW1ldGVyLiBSZXR1cm5zIG1hdGNoaW5nIG5vZGVzIHdpdGgKICogdGhlaXIgdXBkYXRlZCB2YWx1ZXMuCiAqLwpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhcHBseSgKICAgIG9iajogYW55LAogICAgcGF0aEV4cHJlc3Npb246IHN0cmluZywKICAgIGZuOiAoeDogYW55KSA9PiBhbnksCik6IEFycmF5PHsgcGF0aDogUGF0aENvbXBvbmVudFtdOyB2YWx1ZTogYW55IH0+OwoKLyoqCiAqIFBhcnNlIHRoZSBwcm92aWRlZCBKU09OUGF0aCBleHByZXNzaW9uIGludG8gcGF0aCBjb21wb25lbnRzIGFuZCB0aGVpciBhc3NvY2lhdGVkCiAqIG9wZXJhdGlvbnMuCiAqLwpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZShwYXRoRXhwcmVzc2lvbjogc3RyaW5nKTogYW55W107CgovKioKICogUmV0dXJucyBhIHBhdGggZXhwcmVzc2lvbiBpbiBzdHJpbmcgZm9ybSwgZ2l2ZW4gYSBwYXRoLiBUaGUgc3VwcGxpZWQgcGF0aCBtYXkgZWl0aGVyCiAqIGJlIGEgZmxhdCBhcnJheSBvZiBrZXlzLCBhcyByZXR1cm5lZCBieSBganAubm9kZXNgIGZvciBleGFtcGxlLCBvciBtYXkgYWx0ZXJuYXRpdmVseSBiZSBhCiAqIGZ1bGx5IHBhcnNlZCBwYXRoIGV4cHJlc3Npb24gaW4gdGhlIGZvcm0gb2YgYW4gYXJyYXkgb2YgcGF0aCBjb21wb25lbnRzIGFzIHJldHVybmVkCiAqIGJ5IGBqcC5wYXJzZWAuCiAqLwpleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzdHJpbmdpZnkocGF0aDogUGF0aENvbXBvbmVudFtdKTogc3RyaW5nOwoKZXhwb3J0IGFzIG5hbWVzcGFjZSBqc29ucGF0aDsK';\nexport const SMART_LEGAL_CONTRACT_BASE64 = 'LyoKICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KCi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqLwoKLy8gd2UgZHVwbGljYXRlIHRoZXNlIGludGVyZmFjZXMgaGVyZSB0byBhdm9pZCBpbXBvcnRzIGludG8gdGhlIHJ1bnRpbWUKaW50ZXJmYWNlIElDb25jZXB0IHsKICAgICRjbGFzczogc3RyaW5nOwogfQoKaW50ZXJmYWNlIElUcmFuc2FjdGlvbiBleHRlbmRzIElDb25jZXB0IHsKICAgICR0aW1lc3RhbXA6IERhdGU7CiB9CgppbnRlcmZhY2UgSUV2ZW50IGV4dGVuZHMgSUNvbmNlcHQgewogICAkdGltZXN0YW1wOiBEYXRlOwp9CgppbnRlcmZhY2UgSVN0YXRlIHsKICAgICRpZGVudGlmaWVyOiBzdHJpbmc7Cn0KCmludGVyZmFjZSBFbmdpbmVSZXNwb25zZTxTIGV4dGVuZHMgSVN0YXRlPiB7CiAgICBzdGF0ZT86IFM7CiAgICBldmVudHM/OiBBcnJheTxJRXZlbnQ+Cn0KCmludGVyZmFjZSBJUmVxdWVzdCBleHRlbmRzIElUcmFuc2FjdGlvbiB7Cn0KCmludGVyZmFjZSBJUmVzcG9uc2UgZXh0ZW5kcyBJVHJhbnNhY3Rpb24gewp9CgppbnRlcmZhY2UgSUFzc2V0IGV4dGVuZHMgSUNvbmNlcHQgewogICAkaWRlbnRpZmllcjogc3RyaW5nOwp9CgppbnRlcmZhY2UgSUNvbnRyYWN0IGV4dGVuZHMgSUFzc2V0IHsKICAgY29udHJhY3RJZDogc3RyaW5nOwp9CgppbnRlcmZhY2UgSUNsYXVzZSBleHRlbmRzIElBc3NldCB7CiAgIGNsYXVzZUlkOiBzdHJpbmc7Cn0KCmludGVyZmFjZSBUcmlnZ2VyUmVzcG9uc2U8UyBleHRlbmRzIElTdGF0ZSA9IElTdGF0ZT4gZXh0ZW5kcyBFbmdpbmVSZXNwb25zZTxTPiB7CiAgICByZXN1bHQ6IElSZXNwb25zZTsKfQoKaW50ZXJmYWNlIEluaXRSZXNwb25zZTxTIGV4dGVuZHMgSVN0YXRlPiBleHRlbmRzIEVuZ2luZVJlc3BvbnNlPFM+IHt9Cgp0eXBlIFRlbXBsYXRlRGF0YSA9IElDb250cmFjdHxJQ2xhdXNlOwoKZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRlbXBsYXRlTG9naWM8VCBleHRlbmRzIFRlbXBsYXRlRGF0YSwgUyBleHRlbmRzIElTdGF0ZSA9IElTdGF0ZT4gewogICAgYWJzdHJhY3QgdHJpZ2dlcihkYXRhOiBULCByZXF1ZXN0OiBJUmVxdWVzdCwgc3RhdGU6UykgOiBQcm9taXNlPFRyaWdnZXJSZXNwb25zZTxTPj47CiAgICBpbml0KGRhdGE6IFQpIDogUHJvbWlzZTxJbml0UmVzcG9uc2U8Uz58dW5kZWZpbmVkPjsKfQo=';\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { createDefaultMapFromNodeModules, createDefaultMapFromCDN } from '@typescript/vfs';\nimport { twoslasher, TwoSlashOptions, TwoSlashReturn } from '@typescript/twoslash';\nimport { ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptCompilationContext } from './TypeScriptCompilationContext';\nimport { DAYJS_BASE64, JSONPATH_BASE64 } from './runtime/declarations';\nimport * as lzstring from 'lz-string';\n\n/**\n * Compiles user Typescript code to JavaScript. This uses the '@typescript/twoslash'\n * project which is maintained by the Typescript team and powers their web playground.\n * It uses the TypeScriptCompilationContext class to construct a payload for twoslash\n * that is composed of multiple TS files to compile, along with their 3rd-party module\n * dependencies.\n *\n * Note that the 'typescript' module is either dynamically loaded from node_modules (Node.js)\n * or from the CDN (browser). This module is used by twoslash.\n *\n * The 'updateRuntimeDependencies' script it used to package type declarations for 3rd-party\n * modules that we need to expose to user TS code: dayjs and jsonpath, these also need to be\n * added to the twoslash compilation context.\n */\nconst TYPESCRIPT_URL = process.env.TYPESCRIPT_URL ? process.env.TYPESCRIPT_URL : 'https://cdn.jsdelivr.net/npm/typescript@4.9.4/+esm';\n\n// https://microsoft.github.io/monaco-editor/typedoc/enums/languages.typescript.ScriptTarget.html#ES2020\n // enum ScriptTarget {\n // /** @deprecated */\n // ES3 = 0,\n // ES5 = 1,\n // ES2015 = 2,\n // ES2016 = 3,\n // ES2017 = 4,\n // ES2018 = 5,\n // ES2019 = 6,\n // ES2020 = 7,\n // ES2021 = 8,\n // ES2022 = 9,\n // ES2023 = 10,\n // ES2024 = 11,\n // ESNext = 99,\n // JSON = 100,\n // Latest = 99,\n // }\n\nconst SCRIPT_TARGET = 9\n\n // enum ModuleKind {\n // None = 0,\n // CommonJS = 1,\n // AMD = 2,\n // UMD = 3,\n // System = 4,\n // ES2015 = 5,\n // ES2020 = 6,\n // ES2022 = 7,\n // ESNext = 99,\n // Node16 = 100,\n // Node18 = 101,\n // NodeNext = 199,\n // Preserve = 200,\n // }\n\nconst MODULE_KIND = 6;\n\nexport class TypeScriptToJavaScriptCompiler {\n context: string;\n fsMap: Map<string,string>|undefined;\n\n ts: any;\n typescriptUrl: string;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.context = new TypeScriptCompilationContext(modelManager, templateConceptFqn).getCompilationContext();\n this.typescriptUrl = TYPESCRIPT_URL;\n }\n\n async initialize(typescriptUrl?: string) {\n if(typescriptUrl) {\n this.typescriptUrl = typescriptUrl;\n }\n if(typeof window === 'undefined') {\n // node does not (yet) support http(s) imports\n // see: https://nodejs.org/api/esm.html#https-and-http-imports\n this.ts = (await import ('typescript')).default;\n if(!this.ts) {\n throw new Error('Failed to load typescript module');\n }\n this.fsMap = createDefaultMapFromNodeModules({\n target: SCRIPT_TARGET,\n });\n }\n else {\n this.ts = (await import(this.typescriptUrl)).default;\n if(!this.ts) {\n throw new Error('Failed to dynamically load typescript');\n }\n this.fsMap = await createDefaultMapFromCDN({ target: SCRIPT_TARGET }, this.ts.version, false, this.ts);\n }\n this.fsMap.set('/node_modules/@types/dayjs/index.d.ts', Buffer.from(DAYJS_BASE64, 'base64').toString());\n this.fsMap.set('/node_modules/@types/jsonpath/index.d.ts', Buffer.from(JSONPATH_BASE64, 'base64').toString());\n }\n\n compile(typescript: string): TwoSlashReturn {\n if(!this.fsMap) {\n throw new Error('initialize must be awaited before compile is called.');\n }\n const twoSlashCode =`\n${this.context}\n${typescript}\n`;\n\n const options: TwoSlashOptions = {\n fsMap: this.fsMap,\n tsModule: this.ts,\n defaultCompilerOptions: {\n target: SCRIPT_TARGET,\n module: MODULE_KIND,\n },\n lzstringModule:lzstring,\n defaultOptions: {\n showEmit: true,\n noErrorValidation: true,\n showEmittedFile: 'code.js'\n }\n };\n // console.log(twoSlashCode);\n const result = twoslasher(twoSlashCode, 'ts', options);\n return result;\n }\n}\n"," \n// Generated code for namespace: org.accordproject.templatemark@0.5.0\n\n// imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\n\n// Warning: Beware of circular dependencies when modifying these imports\nimport {IChild,INode} from './org.accordproject.commonmark@0.5.0';\nimport {IDecorator} from './concerto.metamodel@1.0.0';\nimport {IConcept} from './concerto@1.0.0';\n\n// interfaces\nexport enum CodeType {\n TYPESCRIPT = 'TYPESCRIPT',\n ES_2020 = 'ES_2020',\n}\n\nexport interface ICode extends IConcept {\n type: CodeType;\n contents: string;\n}\n\nexport interface IElementDefinition extends IChild {\n name: string;\n elementType?: string;\n decorators?: IDecorator[];\n}\n\nexport type ElementDefinitionUnion = IVariableDefinition | \nIFormulaDefinition | \nIBlockDefinition;\n\nexport interface IVariableDefinition extends IElementDefinition {\n identifiedBy?: string;\n}\n\nexport type VariableDefinitionUnion = IFormattedVariableDefinition | \nIEnumVariableDefinition;\n\nexport interface IFormattedVariableDefinition extends IVariableDefinition {\n format: string;\n}\n\nexport interface IEnumVariableDefinition extends IVariableDefinition {\n enumValues: string[];\n}\n\nexport interface IFormulaDefinition extends IElementDefinition {\n dependencies?: string[];\n code: ICode;\n}\n\nexport interface IBlockDefinition extends IElementDefinition {\n}\n\nexport type BlockDefinitionUnion = IClauseDefinition | \nIContractDefinition | \nIWithDefinition | \nIConditionalDefinition | \nIOptionalDefinition | \nIJoinDefinition | \nIListBlockDefinition | \nIForeachBlockDefinition | \nIWithBlockDefinition | \nIConditionalBlockDefinition | \nIOptionalBlockDefinition;\n\nexport interface IClauseDefinition extends IBlockDefinition {\n condition?: ICode;\n}\n\nexport interface IContractDefinition extends IBlockDefinition {\n}\n\nexport interface IWithDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n dependencies?: string[];\n}\n\nexport interface IOptionalDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\nexport interface IJoinDefinition extends IBlockDefinition {\n separator?: string;\n locale?: string;\n type?: string;\n style?: string;\n}\n\nexport interface IListBlockDefinition extends IBlockDefinition {\n type: string;\n tight: string;\n start?: string;\n delimiter?: string;\n}\n\nexport interface IForeachBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IWithBlockDefinition extends IBlockDefinition {\n}\n\nexport interface IConditionalBlockDefinition extends IBlockDefinition {\n whenTrue: IChild[];\n whenFalse: IChild[];\n condition?: ICode;\n}\n\nexport interface IOptionalBlockDefinition extends IBlockDefinition {\n whenSome: IChild[];\n whenNone: IChild[];\n}\n\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport traverse from 'traverse';\nimport { TemplateMarkModel } from '@accordproject/markdown-common';\nimport { ClassDeclaration, ModelManager } from '@accordproject/concerto-core';\nimport { TypeScriptToJavaScriptCompiler } from './TypeScriptToJavaScriptCompiler';\nimport { TwoSlashReturn } from '@typescript/twoslash';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { getTemplateClassDeclaration, nameUserCode, writeFunctionToString } from './utils';\n\nconst CODE_NODES = [\n `${TemplateMarkModel.NAMESPACE}.FormulaDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ConditionalDefinition`,\n `${TemplateMarkModel.NAMESPACE}.ClauseDefinition`,\n];\n\nexport type CompilerError = {\n nodeId: string;\n code: string;\n errors:TwoSlashReturn['errors'];\n};\n\nfunction checkCode(code:ICode) {\n if(code.type !== CodeType.TYPESCRIPT) {\n throw new Error(`Cannot compile ${code.contents} as it is not Typescript.`);\n }\n}\n\n/**\n * Compiles all the Typescript nodes in a TemplateMark JSON\n * to ES_2020 and returns a modified TemplateMark JSON.\n */\nexport class TemplateMarkToJavaScriptCompiler {\n modelManager:ModelManager;\n compiler: TypeScriptToJavaScriptCompiler;\n templateClass: ClassDeclaration;\n\n constructor(modelManager: ModelManager, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.compiler = new TypeScriptToJavaScriptCompiler(modelManager,templateConceptFqn);\n this.templateClass = getTemplateClassDeclaration(modelManager,templateConceptFqn);\n }\n\n async initialize() {\n await this.compiler.initialize();\n }\n\n compile(templateJson: any) : any {\n const namedTemplateMark = nameUserCode(templateJson);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this;\n const errors = Array<CompilerError>();\n const compiled = traverse(namedTemplateMark).map(function (x) {\n if (x && CODE_NODES.includes(x.$class)) {\n if (x.code) { // formula\n checkCode(x.code);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.name, 'any', x.code.contents));\n if(result.errors.length === 0) {\n x.code.contents = result.code;\n x.code.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.name,\n code: x.code.contents,\n errors: result.errors\n });\n }\n }\n else if (x.condition) { // condition or clause (boolean condition)\n checkCode(x.condition);\n const result = that.compiler.compile(writeFunctionToString(that.templateClass, x.functionName, 'boolean', x.condition.contents));\n if(result.errors.length === 0) {\n x.condition.contents = result.code;\n x.condition.type = CodeType.ES_2020;\n this.update(x);\n }\n else {\n errors.push({\n nodeId: x.functionName,\n code: x.condition.contents,\n errors: result.errors\n });\n }\n }\n }\n });\n\n if(errors.length === 0) {\n return compiled;\n }\n else {\n throw errors;\n }\n }\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nconst DEBUG = false;\n\n// BEWARE adding imports to this file\n// as it is used by the static code generator\n\n/**\n * BEWARE - this type is duplicated in TypeScriptCompilationContext\n * for use by code generation\n */\nexport type GenerationOptions = {\n now?: string,\n locale?: string\n disableJavaScriptEvaluation?: boolean\n childProcessJavaScriptEvaluation?: boolean\n timeout?: number\n}\n\nexport function joinList(data:Array<string>, joinDef:any, options?:GenerationOptions) : string {\n if(joinDef.separator) {\n return data.join(joinDef.separator);\n }\n else {\n const formatter = new Intl.ListFormat( joinDef.locale ? joinDef.locale : options?.locale,\n {\n style: (joinDef.style as Intl.ListFormatStyle),\n type: (joinDef.type as Intl.ListFormatType)\n }\n );\n return formatter.format(data);\n }\n}\n\n/**\n * These utility functions are used by the typescript code that\n * is generated from TemplateMark. They manage a stack to improve\n * debuggability.\n */\n\nfunction dump(op:string, $data:any[]) {\n if(DEBUG) {\n console.log(`${op}: ${JSON.stringify($data)}`);\n }\n}\n\nexport function peek($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data[$data.length-1];\n dump('peek', $data);\n return result;\n}\n\nexport function peekProperty($data:any[], propertyName:string, allowUndefined=false) : any {\n const head = peek($data);\n const result = head[propertyName];\n if(!allowUndefined && result === undefined) {\n throw new Error(`Undefined property ${propertyName}. Current stack is ${JSON.stringify($data)}`);\n }\n return result;\n}\n\nexport function push($data:any[], item:any) : number {\n const result = $data.push(item);\n dump('push', $data);\n return result;\n}\n\nexport function addChild($data:any[], item:any) {\n const node = peek($data);\n if(node.nodes) {\n node.nodes.push(item);\n }\n else {\n node.nodes = [item];\n }\n}\n\nexport function pop($data:any[]) : any {\n if($data.length <= 0) {\n throw new Error('Empty array');\n }\n const result = $data.pop();\n dump('pop', $data);\n return result;\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport child_process from 'child_process';\nimport jp from 'jsonpath';\nimport dayjs from 'dayjs';\nimport { EventEmitter } from 'node:events';\nimport path from 'path';\n\nexport type EvalOptions = {\n timeout: number // timeout in milliseconds for this eval request\n}\n\nexport type EvalRequest = {\n verbose?: boolean, // if true the code is verbose and will be logged to the console\n templateLogic?: boolean, // if true the code template logic (a module)\n code: string, // JS code to eval\n functionName?: string, // name of the function to call on the class, in the case templateLogic is true\n argumentNames: string[] // names of function args\n arguments: any[] // function arg values, these have to be serializable to JSON!\n}\n\ntype WorkItem = {\n pid?: number; // process if assigned to the workitem\n startTime: number; // timestamp when workitem created\n expireTime: number; // timestamp for when work must be completed\n request: EvalRequest; // payload to process\n resolve: (result: any) => void; // promise callback for success\n reject: (result: any) => void; // promise callback for failure\n}\n\nexport type EvalResponse = {\n result: any // success if not null\n timeout?: boolean // if true the promise is rejected due to timeout\n starvation?: boolean // if true the promise is rejected due to lack of child process\n message?: string; // if promise rejected due to a caught exception this will be set\n elapsed?: number; // the elapsed time in ms to process the work item\n maxQueueDepthExceeded?: boolean // if true the promise is rejected because the queue is full\n}\n\nexport type JavaScriptEvaluatorOptions = {\n waitInterval: number; // time to wait in ms for a free worker\n maxWorkers: number; // the max number of worker processes\n maxQueueDepth: number; // the max queue depth for the waiting queue\n}\n\ntype ChildProcess = {\n pid?: number\n} & EventEmitter;\n\nasync function sleep(msec: number) {\n return new Promise(resolve => setTimeout(resolve, msec));\n}\n\n// we use this to import modules because it's an ESM module and direct imports won't work...\n// see: https://github.com/TypeStrong/ts-node/discussions/1290\nconst _import = async (path: string) => new Function('specifier', 'return import(specifier)')(path);\n\n// we create a wrapper for the _import above and returns the `default` exported method/function/symbol\n// inferred by the module name or a custom one base on user preferences...\nexport const dynamicImport = async <T>(path: string, symbol?: string) => {\n const mod = await _import(path);\n return symbol ? mod.symbol : mod.default as T;\n}\n\ntype TemplateLogicClassConstructor = () => void;\n\n/**\n * This class implements two JS function evaluation strategies:\n * 1. evalDangerously which creates a dynamic function and run it in-process\n * This should only be used with trusted code, or within a sandbox (e.g. the browser)\n * 2. evalChildProcess which spins up a child Node process to eval the function\n * The maximum number of child processes is capped via JavaScriptEvaluatorOptions\n * as well as the maximum queue depth for the queue used to wait for a free worker\n * child process. Not that to prevent cross-request contamination\n * child processes are NOT pooled and are never reused.\n */\nexport class JavaScriptEvaluator {\n options: JavaScriptEvaluatorOptions;\n workers: Array<ChildProcess>; // child processes\n queue: Array<WorkItem>; // queue of work to do\n\n constructor(options: JavaScriptEvaluatorOptions = {waitInterval: 50, maxWorkers: 8, maxQueueDepth: 1000}) {\n this.options = options;\n this.workers = [];\n this.queue = [];\n }\n\n /**\n * Evaluates a JS function in process.\n * @param {EvalRequest} request - the eval request\n * @returns {Promise} a promise to the result\n */\n async evalDangerously(request: EvalRequest): Promise<EvalResponse> {\n return new Promise((resolve, reject) => {\n try {\n if(request.verbose) {\n console.log(request.code);\n }\n const start = new Date().getTime();\n let result = null;\n // is this a simple JS function?\n if(!request.templateLogic) {\n const fun = new Function(...['dayjs', 'jp', ...request.argumentNames], request.code);\n result = fun(...[dayjs, jp, ...request.arguments]);\n const end = new Date().getTime();\n resolve({ result, elapsed: end - start });\n }\n else {\n // this is a template logic esm module, so we need to dynamic import it\n const dataUri = 'data:text/javascript;base64,'\n + btoa(request.code);\n\n dynamicImport<TemplateLogicClassConstructor>(dataUri)\n .then(templateLogicConstructor => {\n const instance = new templateLogicConstructor();\n if(!request.functionName) {\n throw new Error('No function name specified for template logic');\n }\n result = instance[request.functionName](...request.arguments);\n const end = new Date().getTime();\n resolve({ result, elapsed: end - start });\n })\n .catch(err => {\n console.log(err);\n reject({\n message: err.message\n });\n });\n }\n }\n catch (err: any) {\n console.log(err);\n reject({\n message: err.message\n });\n }\n });\n }\n /**\n * Evaluates a JS function using a node child process\n * @param {EvalRequest} request the eval request\n * @param {EvalOptions} options the options for the request\n * @returns {Promise<EvalResponse>} the async result\n */\n async evalChildProcess(request: EvalRequest, options: EvalOptions = { timeout: 10000 }): Promise<EvalResponse> {\n // console.log('Workers count: ' + this.workers.length);\n return new Promise((resolve, reject) => {\n const now = new Date().getTime();\n const workItem: WorkItem = {\n startTime: now,\n expireTime: now + options.timeout,\n request,\n resolve,\n reject\n };\n if(this.queue.length >= this.options.maxQueueDepth) {\n reject({ maxQueueDepthExceeded: true, elapsed: 0 });\n }\n this.queue.push(workItem);\n this.processQueue(options);\n });\n }\n private processQueue(options: EvalOptions) {\n const now = new Date().getTime();\n const notExpired = this.queue.filter(w => (now < w.expireTime));\n const expired = this.queue.filter(w => (now >= w.expireTime));\n this.queue = notExpired;\n expired.forEach(w => {\n w.reject({ timeout: true, starvation: true, elapsed: now - w.startTime });\n });\n if (this.workers.length < this.options.maxWorkers) {\n // we have a free worker\n const next = this.queue.shift();\n if (next) {\n this.doWork(next, options)\n .then(result => next.resolve(result))\n .catch(error => next.reject(error));\n }\n }\n else {\n // no free worker, so sleep and then try again\n sleep(this.options.waitInterval)\n .then(() => {\n this.processQueue(options);\n });\n }\n }\n private getWorkerPath() : string {\n try {\n const thisPath = require.resolve('@accordproject/template-engine');\n return path.join(thisPath,'..','worker.js');\n } catch(err) { // eslint-disable-line @typescript-eslint/no-unused-vars\n // if we cannot load the module it likely means we are running\n // a unit test inside the module...\n return path.join(__dirname, '..', 'dist', 'worker.js');\n }\n }\n private doWork(work: WorkItem, options: EvalOptions): Promise<EvalResponse> {\n return new Promise((resolve, reject) => {\n const start = new Date().getTime();\n // check for browser\n if (!child_process.fork) {\n reject({ message: 'Cannot use evalChildProcess because child_process.fork is not defined.' });\n }\n // on timeout will send SIGTERM\n const workerPath = this.getWorkerPath();\n // console.debug(`Worker path: ${workerPath}`);\n const worker = child_process.fork(workerPath, { timeout: options.timeout, env: {} });\n if (!worker.pid) {\n throw new Error('Failed to fork child process');\n }\n this.workers.push(worker);\n work.pid = worker.pid;\n let result: any;\n worker.on('error', (err: any) => {\n this.workers = this.workers.filter((w: ChildProcess) => w.pid !== worker.pid);\n const end = new Date().getTime();\n reject({ message: err.message, elapsed: end - start });\n });\n worker.on('message', (msg: any) => {\n result = msg;\n });\n worker.on('exit', (code: any) => {\n if (code === null) {\n // timeout\n this.workers = this.workers.filter((w: ChildProcess) => w.pid !== worker.pid);\n const end = new Date().getTime();\n reject({ timeout: true, elapsed: end - start });\n }\n else if (code === 0 && result) {\n // success!\n this.workers = this.workers.filter((w: ChildProcess) => w.pid !== worker.pid);\n const end = new Date().getTime();\n resolve({ ...result, elapsed: end - start });\n } else {\n // null result or non-zero code from worker means an error\n // result will be undefined if the user code calls process.exit()\n this.workers = this.workers.filter((w: ChildProcess) => w.pid !== worker.pid);\n const end = new Date().getTime();\n reject({ code, result, elapsed: end - start });\n }\n });\n // send the request to the child process\n worker.send(work.request);\n });\n }\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport jp from 'jsonpath';\nimport traverse from 'traverse';\nimport { isBrowser } from 'browser-or-node';\nimport os from 'os';\n\nimport { ClassDeclaration, Factory, Introspector, ModelManager, Serializer } from '@accordproject/concerto-core';\nimport { getDrafter } from './drafting';\nimport { TemplateMarkModel, CommonMarkModel, CiceroMarkModel, ConcertoMetaModel } from '@accordproject/markdown-common';\nimport { ModelUtil } from '@accordproject/concerto-core';\n\nimport {\n TEMPLATEMARK_RE,\n FORMULA_DEFINITION_RE,\n VARIABLE_DEFINITION_RE,\n CONDITIONAL_DEFINITION_RE,\n ENUM_VARIABLE_DEFINITION_RE,\n FORMATTED_VARIABLE_DEFINITION_RE,\n WITH_DEFINITION_RE,\n LISTBLOCK_DEFINITION_RE,\n JOIN_DEFINITION_RE,\n FOREACH_DEFINITION_RE,\n OPTIONAL_DEFINITION_RE,\n CLAUSE_DEFINITION_RE,\n CONTRACT_DEFINITION_RE,\n TemplateData,\n NAVIGATION_NODES\n} from './TemplateMarkNodes';\nimport { TemplateMarkToJavaScriptCompiler } from './TemplateMarkToJavaScriptCompiler';\nimport { CodeType, ICode } from './model-gen/org.accordproject.templatemark@0.5.0';\nimport { GenerationOptions, joinList } from './TypeScriptRuntime';\nimport { getTemplateClassDeclaration } from './utils';\nimport { EvalResponse, JavaScriptEvaluator } from './JavaScriptEvaluator';\n\nfunction checkCode(code: ICode) {\n if (code.type !== CodeType.ES_2020) {\n throw new Error(`Cannot run ${code.contents} as it is not ES_2020 JavaScript.`);\n }\n}\n\n// this is a global because we don't want the user\n// to configure child processes at the TemplateMarkInterpreter instance level\nconst javaScriptEvaluator = isBrowser ? new JavaScriptEvaluator() : new JavaScriptEvaluator({\n maxWorkers: process.env.MAX_WORKERS ? Number.parseInt(process.env.MAX_WORKERS) : os.availableParallelism(), // how many child processes\n waitInterval: process.env.WAIT_INTERVAL ? Number.parseInt(process.env.WAIT_INTERVAL) : 50, // how long to wait before rescheduling work\n maxQueueDepth: process.env.MAX_QUEUE_DEPTH ? Number.parseInt(process.env.MAX_QUEUE_DEPTH) : 1000 // max requests to queue\n});\n\nconst TEMPLATEMARK_ROOT_NODES = [\n 'org.accordproject.templatemark@0.5.0.ClauseDefinition',\n 'org.accordproject.templatemark@0.5.0.ContractDefinition'\n];\n\nconst DOCUMENT_ROOT = 'org.accordproject.commonmark@0.5.0.Document';\n\n/**\n * Evaluates a JS expression\n * @param {*} clauseLibrary the clause library\n * @param {*} data the contract data\n * @param {string} fn the JS function (including header)\n * @param {GenerationOptions} options the generation options\n * @returns {object} the result of evaluating the expression against the data\n */\nasync function evaluateJavaScript(clauseLibrary: object, data: TemplateData, fn: string, options?: GenerationOptions): Promise<EvalResponse> {\n if (options?.disableJavaScriptEvaluation) {\n throw new Error('JavaScript evaluation is disabled.');\n }\n if (!data || !fn) {\n throw new Error(`Cannot evaluate JS ${fn} against ${data}`);\n }\n const functionArgNames = new Array<string>();\n functionArgNames.push('data');\n functionArgNames.push('library');\n functionArgNames.push('options');\n\n const functionArgValues = new Array<any>();\n functionArgValues.push(data);\n functionArgValues.push(clauseLibrary);\n functionArgValues.push(options);\n\n // chop the function header and closing\n const expression = fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}'));\n if (expression.trim().length === 0) {\n throw new Error('Empty expression');\n }\n try {\n const request = { code: expression, argumentNames: functionArgNames, arguments: functionArgValues };\n if (options?.childProcessJavaScriptEvaluation) {\n if (isBrowser) {\n throw new Error('Child process evaluation is not supported inside web browser');\n }\n const evalOptions = options?.timeout ? { timeout: options.timeout } : undefined;\n const r = await javaScriptEvaluator.evalChildProcess(request, evalOptions);\n return r;\n }\n else {\n const r = await javaScriptEvaluator.evalDangerously(request);\n return r;\n }\n }\n catch (err) {\n throw new Error(`Caught error ${JSON.stringify(err)} evaluating ${expression} with arguments ${JSON.stringify(functionArgValues)}`);\n }\n}\n\n/**\n * Calculates a JSON path to use to retrieve data, based on a TemplatemMark tree.\n * For example, if we hit a VariableDefinition {{city}} that is nested inside a\n * WithDefinition {{#with address}} then the JSON path returned should be '$.address.city'.\n * Similarly ListBlockDefinition, JoinDefinition and OptionalDefinition also include\n * property names that must apply to their child nodes.\n * @param {*} rootData the root of the JSON document, typically this is a TemplateMark JSON\n * @param {*} currentNode the current TemplateMark node we are processing\n * @param {string[]} paths the traverse path to the current node\n * @returns {string} the JSON path to use to retrieve data\n */\nfunction getJsonPath(rootData: any, currentNode: any, paths: string[]): string {\n if (!currentNode) {\n throw new Error('Node must be supplied');\n }\n if (!currentNode.name) {\n throw new Error(`Node must have a name: ${JSON.stringify(currentNode)}`);\n }\n if (currentNode.name.indexOf('.') >= 0) {\n // prevent JSON path injection\n throw new Error(`Invalid name property ${currentNode.name}`);\n }\n if (!paths || !paths.length || paths.length < 1) {\n throw new Error('Paths must be supplied');\n }\n const withPath = [];\n for (let n = 1; n < paths.length; n++) {\n const sub = paths.slice(0, n);\n const obj = traverse.get(rootData, sub);\n // HACK\n // if(obj===undefined) {\n // throw new Error(`Failed to find data with path ${sub} and data ${JSON.stringify(rootData, null, 2)}`);\n // }\n if (obj && obj.$class) {\n if (NAVIGATION_NODES.indexOf(obj.$class) >= 0) {\n if(obj.name !== 'top') { // HACK!!\n withPath.push(`['${obj.name}']`);\n }\n }\n }\n }\n\n if (currentNode.name !== 'this' && currentNode.name !== 'top') {\n withPath.push(`['${currentNode.name}']`);\n }\n\n return withPath.length > 0 ? `$${withPath.join('')}` : '$';\n}\n\n// the key is a path[] joined with '/' from the traverse library\n// the value is the evaluation result\ntype UserCodeResult = Record<string, any>;\n\n/**\n * Evaluates all the user code in a template mark document\n * @param {*} clauseLibrary - the clause library\n * @param {*} templateMark - the TemplateMark JSON document\n * @param {*} data - the template data JSON\n * @param {[GenerationOptions]} options - the generation options\n * @returns {Promise<UserCodeResult>} a promise to a UserCodeResult\n */\nasync function evaluateUserCode(clauseLibrary: object, templateMark: object, data: TemplateData, options?: GenerationOptions): Promise<UserCodeResult> {\n const result: UserCodeResult = {};\n const paths = traverse(templateMark).paths();\n for (let n = 0; n < paths.length; n++) {\n const path = paths[n];\n const context = traverse(templateMark).get(path);\n if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {\n const nodeClass = context.$class as string;\n if (FORMULA_DEFINITION_RE.test(nodeClass)) {\n if (context.code) {\n checkCode(context.code);\n const evalResponse = await evaluateJavaScript(clauseLibrary, data, context.code.contents, options);\n result[path.join('/')] = JSON.stringify(evalResponse.result);\n }\n else {\n throw new Error('Formula node is missing code.');\n }\n }\n else if (CONDITIONAL_DEFINITION_RE.test(nodeClass) || CLAUSE_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n checkCode(context.condition);\n const evalResponse = await evaluateJavaScript(clauseLibrary, data, context.condition.contents, options);\n result[path.join('/')] = JSON.stringify(evalResponse.result);\n }\n }\n }\n }\n return result;\n}\n\n// the key is a path[] joined with '/' from the traverse library\n// the value is an array of agreementmark Item nodes for the recursive block\ntype RecursiveBlockResult = Record<string, any[]>;\n\n// the key is a path[] joined with '/' from the traverse library\n// the value is an array of agreementmark nodes for the optional block\ntype OptionalBlockResult = Record<string, any[]>;\n\n/**\n * Generates agreementmark for all optional blocks with proper context switching\n * Warning: this is async and recursive\n * @param {ModelManager} modelManager - the template model\n * @param {*} clauseLibrary - the clause library\n * @param {*} templateMark - the TemplateMark JSON document\n * @param {*} data - the template data JSON\n * @param {[GenerationOptions]} options - the generation options\n * @returns {*} the AgreementMark JSON for optional blocks\n */\nasync function generateOptionalBlocks(modelManager: ModelManager, clauseLibrary: object, templateMark: object, data: TemplateData, options?: GenerationOptions): Promise<OptionalBlockResult> {\n const result: OptionalBlockResult = {};\n const paths = traverse(templateMark).paths();\n for (let n = 0; n < paths.length; n++) {\n const thisPath = paths[n];\n const context = traverse(templateMark).get(thisPath);\n if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {\n const nodeClass = context.$class as string;\n\n // evaluate optional blocks, processing the whenSome content with the optional property value as context\n if (OPTIONAL_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, thisPath);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length > 0) {\n // Optional property exists, process whenSome with the property value as context\n const optionalPropertyValue = variableValues[0];\n if (context.whenSome && context.whenSome.length > 0) {\n // Create a paragraph wrapper for the whenSome content\n const whenSomeParagraph = {\n $class: 'org.accordproject.commonmark@0.5.0.Paragraph',\n nodes: context.whenSome\n };\n // Process with the optional property value as the new data context\n const subResult = await generateAgreement(modelManager, clauseLibrary, whenSomeParagraph, optionalPropertyValue, options);\n result[thisPath.join('/')] = subResult.nodes ? subResult.nodes : [];\n } else {\n result[thisPath.join('/')] = [];\n }\n }\n // If optional property doesn't exist, we don't add anything to results\n // and the normal processing will handle whenNone\n }\n }\n }\n return result;\n}\n\n/**\n * Generates agreementmark for all recursive blocks (list, foreach)\n * Warning: this is async and recursive\n * @param {ModelManager} modelManager - the template model\n * @param {*} clauseLibrary - the clause library\n * @param {*} templateMark - the TemplateMark JSON document\n * @param {*} data - the template data JSON\n * @param {RegExp} nodeRegExp - the regex used to match against $class of nodes\n * @param {string} childNodeClass - the $class to use for the node that wraps child items\n * @param {[GenerationOptions]} options - the generation options\n * @returns {*} the AgreementMark JSON for the list block\n */\nasync function generateRecursiveBlocks(modelManager: ModelManager, clauseLibrary: object, templateMark: object, data: TemplateData, nodeRegExp: RegExp, childNodeClass: string, options?: GenerationOptions): Promise<RecursiveBlockResult> {\n const result: RecursiveBlockResult = {};\n const paths = traverse(templateMark).paths();\n for (let n = 0; n < paths.length; n++) {\n const thisPath = paths[n];\n const context = traverse(templateMark).get(thisPath);\n if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {\n const nodeClass = context.$class as string;\n\n // evaluate nodes, recursing on each child item\n if (nodeRegExp.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, thisPath);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${JSON.stringify(data)}.`);\n }\n else {\n const arrayData = variableValues[0];\n if (!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n const nodes = [];\n for (let n = 0; n < arrayData.length; n++) {\n const arrayItem = arrayData[n];\n // arrayItem is now the data for the nested generation\n const subResult = await generateAgreement(modelManager, clauseLibrary, context.nodes[0].nodes[0], arrayItem, options);\n nodes.push({\n $class: childNodeClass,\n nodes: subResult.nodes ? subResult.nodes : []\n });\n }\n result[thisPath.join('/')] = nodes;\n }\n }\n }\n }\n }\n return result;\n}\n\n/**\n * Generates an AgreementMark JSON document from a template plus data.\n * @param {ModelManager} modelManager - the template model\n * @param {*} clauseLibrary - the clause library\n * @param {*} templateMark - the TemplateMark JSON document\n * @param {*} data - the template data JSON\n * @param {[GenerationOptions]} options - the generation options\n * @returns {*} the AgreementMark JSON\n */\nasync function generateAgreement(modelManager: ModelManager, clauseLibrary: object, templateMark: object, data: TemplateData, options?: GenerationOptions): Promise<any> {\n const introspector = new Introspector(modelManager);\n // evaluate all the user code (async)\n const userCodeResults = await evaluateUserCode(clauseLibrary, templateMark, data, options);\n // evaluate all recursive blocks (async)\n const listBlockResults = await generateRecursiveBlocks(modelManager, clauseLibrary, templateMark, data, LISTBLOCK_DEFINITION_RE, `${CommonMarkModel.NAMESPACE}.Item`, options);\n const foreachBlockResults = await generateRecursiveBlocks(modelManager, clauseLibrary, templateMark, data, FOREACH_DEFINITION_RE, `${CommonMarkModel.NAMESPACE}.Paragraph`, options);\n // evaluate all optional blocks (async)\n const optionalBlockResults = await generateOptionalBlocks(modelManager, clauseLibrary, templateMark, data, options);\n // traverse the templatemark, creating an output agreementmark tree\n return traverse(templateMark).map(function (context: any) {\n let stopHere = false;\n if (typeof context === 'object' && context.$class && typeof context.$class === 'string') {\n const nodeClass = context.$class as string;\n\n // rewrite node types, mapping from TemplateMark namespace to CiceroMark\n const match = nodeClass.match(TEMPLATEMARK_RE);\n if (match && match.length > 1) {\n context.$class = `${CiceroMarkModel.NAMESPACE}.${match[3]}`;\n }\n\n // convert a contract node to a clause node (HACK)\n if (CONTRACT_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // convert a WithDefinition to a Paragraph in the output\n // not 100% sure we want to do that ... we may need to process\n // the child variable nodes and reparent them?\n if (WITH_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Paragraph`;\n delete context.name;\n delete context.elementType;\n }\n\n // add a 'value' property to FormulaDefinition\n // with the result of evaluating the JS code\n else if (FORMULA_DEFINITION_RE.test(nodeClass)) {\n if (context.code) {\n const result = userCodeResults[this.path.join('/')];\n if (result === null) {\n context.value = '<null>';\n }\n else if (typeof result === 'string') {\n context.value = result;\n }\n else {\n context.value = JSON.stringify(result);\n }\n delete context.code;\n }\n else {\n throw new Error('Formula node is missing code.');\n }\n }\n\n // evaluate lists, recursing on each list item\n else if (LISTBLOCK_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.List`;\n delete context.elementType;\n delete context.name;\n context.nodes = listBlockResults[this.path.join('/')];\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n\n // map over an array of items, joining them into a Text node\n else if (JOIN_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${JSON.stringify(data)}.`);\n }\n else {\n const arrayData = variableValues[0];\n if (!Array.isArray(arrayData)) {\n throw new Error(`Values found for path '${path}' in data ${data} is not an array: ${arrayData}.`);\n }\n else {\n context.$class = `${CommonMarkModel.NAMESPACE}.Text`;\n const drafter = getDrafter(context.elementType);\n context.text = joinList(arrayData.map(arrayItem => {\n return drafter ? drafter(arrayItem, context.format) : arrayItem as string;\n }), context, options);\n delete context.elementType;\n delete context.name;\n delete context.separator;\n delete context.locale;\n delete context.type;\n delete context.style;\n delete context.nodes;\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n }\n }\n\n // map over an array of items, joining them into a Text node\n else if (FOREACH_DEFINITION_RE.test(nodeClass)) {\n context.$class = `${CommonMarkModel.NAMESPACE}.Foreach`;\n delete context.elementType;\n delete context.name;\n context.nodes = foreachBlockResults[this.path.join('/')];\n stopHere = true; // do not process child nodes, we've already done it above...\n }\n\n // add a 'value' property to VariableDefinition\n // with the value of the variable from 'data'\n else if (VARIABLE_DEFINITION_RE.test(nodeClass) ||\n ENUM_VARIABLE_DEFINITION_RE.test(nodeClass) ||\n FORMATTED_VARIABLE_DEFINITION_RE.test(nodeClass)) {\n if (typeof data === 'object') {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues.length === 0) {\n throw new Error(`No values found for path '${path}' in data ${JSON.stringify(data)}.`);\n }\n else {\n // convert the value to a string, optionally using the formatter\n const variableValue = variableValues[0];\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n else {\n // a list of enum values or primitives brings us here\n const variableValue = data;\n const type = (ModelUtil as any).isPrimitiveType(context.elementType) ? null : introspector.getClassDeclaration(context.elementType);\n // we want to draft Enums as strings, not objects\n const drafter = getDrafter(type && type.isEnum() ? 'String' : context.elementType);\n context.value = drafter ? drafter(variableValue, context.format) : JSON.stringify(variableValue) as string;\n }\n }\n\n // add a 'isTrue' property to ConditionDefinition\n // with the result of evaluating the JS code or a boolean property\n else if (CONDITIONAL_DEFINITION_RE.test(nodeClass)) {\n if (context.condition) {\n const key = this.path.join('/');\n const resultStr = userCodeResults[key];\n if (resultStr === undefined || resultStr === null) {\n // Treat missing result as false (e.g., condition didn't return a value)\n context.isTrue = false;\n } else {\n try {\n // Parse the JSON-stringified result to get the actual boolean value\n context.isTrue = !!JSON.parse(resultStr);\n } catch (err) {\n throw new Error(`Invalid JSON boolean result for condition '${key}': ${String(err)}`);\n }\n }\n }\n else {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if (variableValues.length === 1) {\n context.isTrue = !!variableValues[0];\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.isTrue = false;\n }\n }\n context.nodes = context.isTrue ? context.whenTrue : context.whenFalse;\n delete context.condition;\n delete context.dependencies;\n delete context.functionName;\n }\n\n // only include the children of a clause if its condition is true\n else if (CLAUSE_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n\n // If there's an explicit condition, evaluate it first (takes precedence over implicit check).\n // This allows conditions like \"return address!==undefined\" to work correctly when\n // the optional field is missing - the condition controls whether to render the clause.\n if (context.condition) {\n checkCode(context.condition);\n const key = this.path.join('/');\n const resultStr = userCodeResults[key];\n let result = false;\n if (resultStr === undefined || resultStr === null) {\n // Treat missing result as false (e.g., condition didn't return a value)\n result = false;\n } else {\n try {\n // Parse the JSON-stringified result to get the actual boolean value\n result = !!JSON.parse(resultStr);\n } catch (err) {\n throw new Error(`Invalid JSON boolean result for condition '${key}': ${String(err)}`);\n }\n }\n if (!result) {\n delete context.nodes;\n stopHere = true;\n }\n }\n // Otherwise, apply implicit undefined check: skip clause block if scoped variable is undefined/null.\n // Skip this check for the root template clause (name === 'top') since its data IS the root object.\n else if (context.name !== 'top' && (variableValues.length === 0 || variableValues[0] === undefined || variableValues[0] === null)) {\n delete context.nodes;\n stopHere = true;\n }\n\n delete context.condition;\n delete context.functionName;\n }\n\n // add a 'hasSome' property to OptionalDefinition\n else if (OPTIONAL_DEFINITION_RE.test(nodeClass)) {\n const path = getJsonPath(templateMark, context, this.path);\n const variableValues = jp.query(data, path, 1);\n if (variableValues && variableValues.length) {\n if (variableValues.length === 1) {\n context.hasSome = true;\n context.whenNone = [];\n // Check if we have processed optional blocks for this path\n if (optionalBlockResults[this.path.join('/')]) {\n context.nodes = optionalBlockResults[this.path.join('/')];\n // Set whenSome to empty since we've processed it, but keep the field for validation\n context.whenSome = [];\n stopHere = true; // do not process child nodes, we've already done it above...\n } else {\n context.nodes = context.whenSome;\n }\n }\n else {\n throw new Error(`Multiple values found for path '${path}' in data ${data}.`);\n }\n }\n else {\n context.hasSome = false;\n context.whenSome = [];\n context.nodes = context.whenNone;\n }\n }\n }\n this.update(context, stopHere);\n });\n}\n\n/**\n * A template engine: merges the markup and logic of a template with\n * JSON data to produce JSON data.\n */\nexport class TemplateMarkInterpreter {\n modelManager: ModelManager;\n templateClass: ClassDeclaration;\n clauseLibrary: object;\n\n constructor(modelManager: ModelManager, clauseLibrary: object, templateConceptFqn?: string) {\n this.modelManager = modelManager;\n this.clauseLibrary = clauseLibrary;\n this.templateClass = getTemplateClassDeclaration(this.modelManager, templateConceptFqn);\n }\n\n /**\n * Checks that a TemplateMark JSON document is valid with respect to the\n * TemplateMark model, as well as the template model.\n *\n * Checks:\n * 1. Variable names are valid properties in the template model\n * 2. Optional properties have guards\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON that has been typed checked and has type metadata added\n * @throws {Error} if the templateMark document is invalid\n */\n checkTypes(templateMark: object): object {\n const modelManager = new ModelManager();\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(TemplateMarkModel.MODEL, 'templatemark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager, {});\n try {\n serializer.fromJSON(templateMark, {});\n }\n catch (err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(templateMark, null, 2)}`);\n }\n\n const errors: Array<{ propertyName: string, message: string }> = [];\n const templateClass = this.templateClass;\n const guardBlockPaths: Map<string, string> = new Map();\n\n traverse(templateMark).forEach(function (node: any) {\n if (!node || typeof node !== 'object' || !node.$class) return;\n\n const currentPath = this.path.join('/');\n if (OPTIONAL_DEFINITION_RE.test(node.$class) ||\n CONDITIONAL_DEFINITION_RE.test(node.$class) ||\n WITH_DEFINITION_RE.test(node.$class)) {\n guardBlockPaths.set(node.name, currentPath);\n }\n if (VARIABLE_DEFINITION_RE.test(node.$class) ||\n ENUM_VARIABLE_DEFINITION_RE.test(node.$class) ||\n FORMATTED_VARIABLE_DEFINITION_RE.test(node.$class)) {\n const propName = node.name;\n if (propName && propName !== 'this') {\n try {\n const property = templateClass.getProperty(propName);\n if (property && property.isOptional()) {\n const guardPath = guardBlockPaths.get(propName);\n const isGuarded = guardPath !== undefined &&\n (currentPath === guardPath || currentPath.startsWith(guardPath + '/'));\n if (!isGuarded) {\n errors.push({\n propertyName: propName,\n message: `Optional property '${propName}' is used without a guard. Wrap it in {{#optional ${propName}}}...{{/optional}} or {{#if ${propName}}}...{{/if}}.`\n });\n }\n }\n } catch {\n // Property not found at root level, might be nested - skip\n }\n }\n }\n });\n\n if (errors.length > 0) {\n const errorMessage = `Optional properties used without guards: ${errors.map(e => e.propertyName).join(', ')}`;\n const error = new Error(errorMessage);\n (error as any).errors = errors;\n throw error;\n }\n\n return templateMark;\n }\n\n\n\n /**\n * Compiles the code nodes containing TS to code nodes containing JS.\n * @param {*} templateMark the TemplateMark JSON object\n * @returns {*} TemplateMark JSON with JS nodes\n * @throws {Error} if the templateMark document is invalid\n */\n async compileTypeScriptToJavaScript(templateMark: object): Promise<object> {\n const clazz = (templateMark as any).$class;\n if(clazz !== DOCUMENT_ROOT) {\n throw new Error(`JSON is not CommonMark. $class is '${clazz}'. ${JSON.stringify(templateMark, null, 2)}`);\n }\n\n if(!(templateMark as any).nodes || !(templateMark as any).nodes.length || (templateMark as any).nodes.length < 1) {\n throw new Error(`CommonMark does not have nodes: ${JSON.stringify(templateMark, null, 2)}`);\n }\n const firstChild = (templateMark as any).nodes[0];\n const firstChildClazz = (firstChild as any).$class;\n\n if(!TEMPLATEMARK_ROOT_NODES.includes(firstChildClazz)) {\n throw new Error(`First child is not templatemark. $class is '${firstChildClazz}'. ${JSON.stringify(templateMark, null, 2)}`);\n }\n const templateConcept = (firstChild as any).elementType;\n if (!templateConcept) {\n throw new Error(`First child is not typed: ${JSON.stringify(templateMark, null, 2)}`);\n }\n if(firstChild.name !== 'top') {\n throw new Error('First child is not named \"top\"!');\n }\n const compiler = new TemplateMarkToJavaScriptCompiler(this.modelManager, templateConcept);\n await compiler.initialize();\n return compiler.compile(templateMark);\n }\n\n validateCiceroMark(ciceroMark: object): object {\n const modelManager = new ModelManager();\n modelManager.addCTOModel(ConcertoMetaModel.MODEL, 'concertometamodel.cto');\n modelManager.addCTOModel(CommonMarkModel.MODEL, 'commonmark.cto');\n modelManager.addCTOModel(CiceroMarkModel.MODEL, 'ciceromark.cto');\n const factory = new Factory(modelManager);\n const serializer = new Serializer(factory, modelManager, {});\n try {\n return serializer.fromJSON(ciceroMark, {});\n }\n catch (err) {\n throw new Error(`Generated invalid agreement: ${err}: ${JSON.stringify(ciceroMark, null, 2)}`);\n }\n }\n\n async generate(templateMark: object, data: TemplateData, options?: GenerationOptions): Promise<any> {\n const factory = new Factory(this.modelManager);\n const serializer = new Serializer(factory, this.modelManager, {});\n const templateData = serializer.fromJSON(data, {});\n if (templateData.getFullyQualifiedType() !== this.templateClass.getFullyQualifiedName()) {\n throw new Error(`Template data must be of type '${this.templateClass.getFullyQualifiedName()}'.`);\n }\n const typedTemplateMark = this.checkTypes(templateMark);\n const jsTemplateMark = await this.compileTypeScriptToJavaScript(typedTemplateMark);\n // console.log('Compiled JS: ' + JSON.stringify(jsTemplateMark, null, 2));\n const ciceroMark = await generateAgreement(this.modelManager, this.clauseLibrary, jsTemplateMark, data, options);\n // console.log('Generated AgreementMark');\n return this.validateCiceroMark(ciceroMark);\n }\n}\n","/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Template } from '@accordproject/cicero-core';\nimport { TemplateMarkInterpreter } from './TemplateMarkInterpreter';\nimport { TemplateMarkTransformer } from '@accordproject/markdown-template';\nimport { transform } from '@accordproject/markdown-transform';\nimport { TypeScriptToJavaScriptCompiler } from './TypeScriptToJavaScriptCompiler';\nimport Script from '@accordproject/cicero-core/types/src/script';\nimport { TwoSlashReturn } from '@typescript/twoslash';\nimport { JavaScriptEvaluator } from './JavaScriptEvaluator';\nimport { SMART_LEGAL_CONTRACT_BASE64 } from './runtime/declarations';\n\nexport type State = object;\nexport type Response = object;\nexport type Event = object;\n\nexport type TriggerResponse = {\n result: Response;\n state: State;\n events: Event[];\n}\n\nexport type InitResponse = {\n state: State;\n}\n\n/**\n * A template archive processor: can draft content using the\n * templatemark for the archive and trigger the logic of the archive\n */\nexport class TemplateArchiveProcessor {\n template: Template;\n\n /**\n * Creates a template archive processor\n * @param {Template} template - the template to be used by the processor\n */\n constructor(template: Template) {\n this.template = template;\n }\n\n /**\n * Drafts a template by merging it with data\n * @param {any} data the data to merge with the template\n * @param {string} format the output format\n * @param {any} options merge options\n * @param {[string]} currentTime the current value for 'now'\n * @returns {Promise} the drafted content\n */\n async draft(data: any, format: string, options: any, currentTime?: string): Promise<any> {\n // Setup\n const metadata = this.template.getMetadata();\n const templateKind = metadata.getTemplateType() !== 0 ? 'clause' : 'contract';\n\n // Get the data\n const modelManager = this.template.getModelManager();\n const engine = new TemplateMarkInterpreter(modelManager, {});\n const templateMarkTransformer = new TemplateMarkTransformer();\n const templateMarkDom = templateMarkTransformer.fromMarkdownTemplate(\n { content: this.template.getTemplate() }, modelManager, templateKind, {options});\n const now = currentTime ? currentTime : new Date().toISOString();\n // console.log(JSON.stringify(templateMarkDom, null, 2));\n const ciceroMark = await engine.generate(templateMarkDom, data, { now });\n // console.log(JSON.stringify(ciceroMark));\n const result = transform(ciceroMark.toJSON(), 'ciceromark', ['ciceromark_unquoted', format], null, options);\n // console.log(result);\n return result;\n\n }\n\n /**\n * Trigger the logic of a template\n * @param {object} request - the request to send to the template logic\n * @param {object} state - the current state of the template\n * @param {[string]} currentTime - the current time, defaults to now\n * @param {[number]} utcOffset - the UTC offset, defaults to zero\n * @returns {Promise} the response and any events\n */\n async trigger(data: any, request: any, state?: any, currentTime?: string, utcOffset?: number): Promise<TriggerResponse> {\n const logicManager = this.template.getLogicManager();\n if(logicManager.getLanguage() === 'typescript') {\n const compiledCode:Record<string, TwoSlashReturn> = {};\n const tsFiles:Array<Script> = logicManager.getScriptManager().getScriptsForTarget('typescript');\n for(let n=0; n < tsFiles.length; n++) {\n const tsFile = tsFiles[n];\n // console.log(`Compiling ${tsFile.getIdentifier()}`);\n\n const compiler = new TypeScriptToJavaScriptCompiler(this.template.getModelManager(),\n this.template.getTemplateModel().getFullyQualifiedName());\n\n await compiler.initialize();\n\n // add the runtime type definitions to all ts files??\n const code = `${Buffer.from(SMART_LEGAL_CONTRACT_BASE64, 'base64').toString()}\n ${tsFile.getContents()}`\n\n const result = compiler.compile(code);\n compiledCode[tsFile.getIdentifier()] = result;\n }\n // console.log(compiledCode['logic/logic.ts'].code);\n const resolvedTime = currentTime ?? new Date().toISOString();\n const resolvedOffset = utcOffset ?? 0;\n const evaluator = new JavaScriptEvaluator();\n const evalResponse = await evaluator.evalDangerously( {\n templateLogic: true,\n verbose: false,\n functionName: 'trigger',\n code: compiledCode['logic/logic.ts'].code, // TODO DCS - how to find the code to run?\n argumentNames: ['data', 'request', 'state'],\n arguments: [data, request, state, resolvedTime, resolvedOffset]\n });\n if(evalResponse.result) {\n return evalResponse.result;\n }\n else {\n throw new Error('Trigger failed with message: ' + evalResponse.message);\n }\n }\n else {\n throw new Error('Only TypeScript is supported at this time');\n }\n }\n\n /**\n * Init the logic of a template\n * @param {[string]} currentTime - the current time, defaults to now\n * @param {[number]} utcOffset - the UTC offset, defaults to zero\n * @returns {Promise<InitResponse>} the new state\n */\n async init(data: any, currentTime?: string, utcOffset?: number): Promise<InitResponse> {\n const logicManager = this.template.getLogicManager();\n if(logicManager.getLanguage() === 'typescript') {\n const compiledCode:Record<string, TwoSlashReturn> = {};\n const tsFiles:Array<Script> = logicManager.getScriptManager().getScriptsForTarget('typescript');\n for(let n=0; n < tsFiles.length; n++) {\n const tsFile = tsFiles[n];\n // console.log(`Compiling ${tsFile.getIdentifier()}`);\n\n const compiler = new TypeScriptToJavaScriptCompiler(this.template.getModelManager(),\n this.template.getTemplateModel().getFullyQualifiedName());\n\n await compiler.initialize();\n\n // add the runtime type definitions to all ts files??\n const code = `${Buffer.from(SMART_LEGAL_CONTRACT_BASE64, 'base64').toString()}\n ${tsFile.getContents()}`\n\n const result = compiler.compile(code);\n compiledCode[tsFile.getIdentifier()] = result;\n }\n // console.log(compiledCode['logic/logic.ts'].code);\n const resolvedTime = currentTime ?? new Date().toISOString();\n const resolvedOffset = utcOffset ?? 0;\n const evaluator = new JavaScriptEvaluator();\n const evalResponse = await evaluator.evalDangerously( {\n templateLogic: true,\n verbose: false,\n functionName: 'init',\n code: compiledCode['logic/logic.ts'].code, // TODO DCS - how to find the code to run?\n argumentNames: ['data'],\n arguments: [data, resolvedTime, resolvedOffset]\n });\n if(evalResponse.result) {\n return evalResponse.result;\n }\n else {\n throw new Error('Init failed with message: ' + evalResponse.message);\n }\n }\n else {\n throw new Error('Only TypeScript is supported at this time');\n }\n }\n}\n"],"names":["ToWords","draftLongFormat","draftLong","CurrencyCode","TemplateMarkModel","existsSync","mkdirSync","rmSync","Introspector","templatemarkutil","CodeGen","InMemoryWriter","createDefaultMapFromNodeModules","createDefaultMapFromCDN","lzstring","twoslasher","CodeType","checkCode","path","isBrowser","n","CommonMarkModel","CiceroMarkModel","ModelUtil","ModelManager","ConcertoMetaModel","Factory","Serializer","TemplateMarkTransformer","transform"],"mappings":"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"}
|