intelligent-system-design-language 0.3.21 → 0.3.23
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/.claude/agents/langium-language-designer.md +38 -38
- package/.claude/agents/typescript-vscode-expert.md +29 -29
- package/.claude/agents/ui-ux-designer.md +36 -36
- package/.claude/settings.local.json +33 -33
- package/.idea/inspectionProfiles/Project_Default.xml +6 -6
- package/.idea/isdl.iml +13 -13
- package/.idea/modules.xml +8 -8
- package/.idea/vcs.xml +6 -6
- package/.idea/watcherTasks.xml +3 -3
- package/.vscodeignore +18 -18
- package/LICENSE +673 -673
- package/README.md +86 -86
- package/bin/cli.js +4 -4
- package/bin/lsp.js +8 -8
- package/out/_backgrounds.scss +91 -91
- package/out/_handlebars.scss +497 -497
- package/out/_isdlStyles.scss +1444 -1381
- package/out/_vuetifyOverrides.scss +425 -425
- package/out/_vuetifyStyles.scss +31957 -31957
- package/out/cli/components/_backgrounds.scss +91 -91
- package/out/cli/components/_handlebars.scss +497 -497
- package/out/cli/components/_isdlStyles.scss +1444 -1381
- package/out/cli/components/_vuetifyOverrides.scss +425 -425
- package/out/cli/components/_vuetifyStyles.scss +31957 -31957
- package/out/cli/components/active-effect-sheet-generator.js +453 -453
- package/out/cli/components/chat-card-generator.js +654 -651
- package/out/cli/components/chat-card-generator.js.map +1 -1
- package/out/cli/components/css-generator.js +4 -4
- package/out/cli/components/damage-roll-generator.js +160 -160
- package/out/cli/components/datamodel-generator.js +264 -257
- package/out/cli/components/datamodel-generator.js.map +1 -1
- package/out/cli/components/derived-data-generator.js +923 -923
- package/out/cli/components/hotbar-drop-hook-generator.js +82 -82
- package/out/cli/components/init-hook-generator.js +495 -495
- package/out/cli/components/language-generator.js +1 -1
- package/out/cli/components/language-generator.js.map +1 -1
- package/out/cli/components/measured-template-preview.js +221 -221
- package/out/cli/components/method-generator.js +979 -887
- package/out/cli/components/method-generator.js.map +1 -1
- package/out/cli/components/ready-hook-generator.js +404 -404
- package/out/cli/components/token-generator.js +116 -116
- package/out/cli/components/vue/base-components/vue-attribute.js +138 -138
- package/out/cli/components/vue/base-components/vue-boolean.js +64 -64
- package/out/cli/components/vue/base-components/vue-calculator.js +93 -93
- package/out/cli/components/vue/base-components/vue-damage-application.js +356 -356
- package/out/cli/components/vue/base-components/vue-damage-bonuses.js +165 -165
- package/out/cli/components/vue/base-components/vue-damage-resistances.js +196 -196
- package/out/cli/components/vue/base-components/vue-damage-track.js +121 -121
- package/out/cli/components/vue/base-components/vue-date-time.js +42 -42
- package/out/cli/components/vue/base-components/vue-dice.js +98 -98
- package/out/cli/components/vue/base-components/vue-die.js +73 -73
- package/out/cli/components/vue/base-components/vue-document-choice.js +149 -149
- package/out/cli/components/vue/base-components/vue-document-choices.js +179 -179
- package/out/cli/components/vue/base-components/vue-document-link.js +60 -60
- package/out/cli/components/vue/base-components/vue-extended-choice.js +88 -88
- package/out/cli/components/vue/base-components/vue-inventory.js +519 -519
- package/out/cli/components/vue/base-components/vue-macro-choice.js +138 -138
- package/out/cli/components/vue/base-components/vue-measured-template.js +530 -530
- package/out/cli/components/vue/base-components/vue-money.js +483 -483
- package/out/cli/components/vue/base-components/vue-number.js +174 -174
- package/out/cli/components/vue/base-components/vue-paperdoll.js +43 -43
- package/out/cli/components/vue/base-components/vue-parent-property-reference.js +76 -76
- package/out/cli/components/vue/base-components/vue-prosemirror.js +18 -18
- package/out/cli/components/vue/base-components/vue-resource.js +136 -136
- package/out/cli/components/vue/base-components/vue-roll-visualizer.js +286 -109
- package/out/cli/components/vue/base-components/vue-roll-visualizer.js.map +1 -1
- package/out/cli/components/vue/base-components/vue-self-property-reference.js +62 -62
- package/out/cli/components/vue/base-components/vue-string-choice.js +98 -98
- package/out/cli/components/vue/base-components/vue-string-choices.js +203 -203
- package/out/cli/components/vue/base-components/vue-string.js +60 -60
- package/out/cli/components/vue/base-components/vue-text-field.js +53 -53
- package/out/cli/components/vue/base-components/vue-tracker.js +431 -431
- package/out/cli/components/vue/vue-action-component-generator.js +64 -64
- package/out/cli/components/vue/vue-active-effect-sheet-generator.js +856 -856
- package/out/cli/components/vue/vue-datatable-sheet-class-generator.js +292 -292
- package/out/cli/components/vue/vue-datatable2-component-generator.js +824 -824
- package/out/cli/components/vue/vue-document-creation-app.js +121 -121
- package/out/cli/components/vue/vue-document-creation-sheet.js +94 -94
- package/out/cli/components/vue/vue-generator.js +40 -40
- package/out/cli/components/vue/vue-mixin.js +296 -296
- package/out/cli/components/vue/vue-pinned-datatable-component-generator.js +260 -260
- package/out/cli/components/vue/vue-prompt-generator.js +91 -76
- package/out/cli/components/vue/vue-prompt-generator.js.map +1 -1
- package/out/cli/components/vue/vue-prompt-sheet-class-generator.js +317 -317
- package/out/cli/components/vue/vue-sheet-application-generator.js +1177 -1167
- package/out/cli/components/vue/vue-sheet-application-generator.js.map +1 -1
- package/out/cli/components/vue/vue-sheet-class-generator.js +510 -510
- package/out/cli/generator.js +438 -433
- package/out/cli/generator.js.map +1 -1
- package/out/extension/github/githubAuthProvider.js +71 -29
- package/out/extension/github/githubAuthProvider.js.map +1 -1
- package/out/extension/github/githubGistManager.js +4 -3
- package/out/extension/github/githubGistManager.js.map +1 -1
- package/out/extension/github/githubManager.js +40 -38
- package/out/extension/github/githubManager.js.map +1 -1
- package/out/extension/github/githubQuickActions.js +120 -120
- package/out/extension/github/system-workflow.yml +47 -47
- package/out/extension/main.cjs +909 -532
- package/out/extension/main.cjs.map +3 -3
- package/out/extension/package.json +419 -419
- package/out/language/generated/ast.js +51 -2
- package/out/language/generated/ast.js.map +1 -1
- package/out/language/generated/grammar.js +14240 -13991
- package/out/language/generated/grammar.js.map +1 -1
- package/out/language/intelligent-system-design-language-validator.js +32 -2
- package/out/language/intelligent-system-design-language-validator.js.map +1 -1
- package/out/language/isdl-scope-provider.js +14 -1
- package/out/language/isdl-scope-provider.js.map +1 -1
- package/out/language/main.cjs +913 -569
- package/out/language/main.cjs.map +3 -3
- package/out/package.json +419 -419
- package/out/progressbar.min.js +6 -6
- package/out/styles.scss +762 -747
- package/out/test/validating/diagnostics.test.js +40 -0
- package/out/test/validating/diagnostics.test.js.map +1 -1
- package/package.json +419 -419
|
@@ -1,8 +1,495 @@
|
|
|
1
1
|
import { isRollParam, isTypeParam, } from '../../language/generated/ast.js';
|
|
2
|
-
import { isReturnExpression, isAssignment, isBinaryExpression, isGroup, isVariableExpression, isLiteral, isRef, isNegExpression, isAccess, isMethodBlock, isIfStatement, isJS, isChatCard, isFleetingAccess, isHtmlExp, isRoll, isDamageRoll, isParentAccess, isParentAssignment, isVariableAssignment, isWhenExpressions, isShorthandComparisonExpression, isItemAccess, isExpression, isResourceExp, isBooleanExp, isSelfMethod, isAttributeExp, isArrayExpression, isEach, isParameter, isPrompt, isLabelParam, isTargetParam, IntelligentSystemDesignLanguageTerminals, isMathExpression, isMathEmptyExpression, isMathSingleExpression, isMathParamExpression, isInitiativeProperty, isStatusProperty, isUpdate, isUpdateParent, isUpdateSelf, isParentTypeCheckExpression, isParentPropertyRefExp, isSelfPropertyRefExp, isLogExpression, isTrackerExp, isVisibilityValue, isFunctionCall, isAction, isDocument, isIncrementDecrementAssignment, isQuickModifyAssignment, isVariableIncrementDecrementAssignment, isVariableQuickModifyAssignment, isParentIncrementDecrementAssignment, isParentQuickModifyAssignment, isLocationParam, isWidthParam, isHeightParam, isNumberRange, isTargetTypeCheckExpression, isTargetAccess, isTargetIncrementDecrementAssignment, isTargetQuickModifyAssignment, isTargetAssignment, isWait, isPlayAudio, isPlayAudioFile, isPlayAudioVolume, isDieField, isTimeLimitParam, isCombatMethods, isCombatProperty, isUserProperty, isMacroExecute, isMeasuredTemplateField, isStringChoiceField, isDamageTypeChoiceField, isDiceField, isDieChoicesParam, isDocumentChoicesExp, isDocumentChoiceExp, isTableField, isInventoryField, isProperty } from "../../language/generated/ast.js";
|
|
2
|
+
import { isReturnExpression, isAssignment, isBinaryExpression, isGroup, isVariableExpression, isLiteral, isRef, isNegExpression, isAccess, isMethodBlock, isIfStatement, isJS, isChatCard, isFleetingAccess, isHtmlExp, isRoll, isDamageRoll, isParentAccess, isParentAssignment, isVariableAssignment, isWhenExpressions, isShorthandComparisonExpression, isItemAccess, isExpression, isResourceExp, isBooleanExp, isSelfMethod, isAttributeExp, isArrayExpression, isEach, isParameter, isPrompt, isLabelParam, isTargetParam, IntelligentSystemDesignLanguageTerminals, isMathExpression, isMathEmptyExpression, isMathSingleExpression, isMathParamExpression, isInitiativeProperty, isStatusProperty, isUpdate, isUpdateParent, isUpdateSelf, isParentTypeCheckExpression, isParentPropertyRefExp, isSelfPropertyRefExp, isLogExpression, isTrackerExp, isVisibilityValue, isFunctionCall, isAction, isDocument, isIncrementDecrementAssignment, isQuickModifyAssignment, isVariableIncrementDecrementAssignment, isVariableQuickModifyAssignment, isParentIncrementDecrementAssignment, isParentQuickModifyAssignment, isLocationParam, isWidthParam, isHeightParam, isNumberRange, isTargetTypeCheckExpression, isTargetAccess, isTargetIncrementDecrementAssignment, isTargetQuickModifyAssignment, isTargetAssignment, isWait, isPlayAudio, isPlayAudioFile, isPlayAudioVolume, isDieField, isTimeLimitParam, isCombatMethods, isCombatProperty, isUserProperty, isMacroExecute, isMeasuredTemplateField, isStringChoiceField, isDamageTypeChoiceField, isDiceField, isDieChoicesParam, isDocumentChoicesExp, isDocumentChoiceExp, isTableField, isInventoryField, isProperty, isRollVisualizerValueParam, isPromptInputAccess } from "../../language/generated/ast.js";
|
|
3
3
|
import { expandToNode, joinToNode } from 'langium/generate';
|
|
4
4
|
import { getParentDocument, getPromptRegistryKey, getPromptVariable, getSystemPath, getTargetDocument, toMachineIdentifier } from './utils.js';
|
|
5
5
|
import { AstUtils } from 'langium';
|
|
6
|
+
// Module-scoped copy used by the lifted translateDiceParts/translateDiceData.
|
|
7
|
+
// (translateExpression keeps its own identical nested humanize for its other call sites.)
|
|
8
|
+
function humanize(string) {
|
|
9
|
+
if (string == undefined) {
|
|
10
|
+
return "";
|
|
11
|
+
}
|
|
12
|
+
// Turn TitleCase into Title Case
|
|
13
|
+
// Ensure first letter of the string is capitalized
|
|
14
|
+
string = string.charAt(0).toUpperCase() + string.slice(1);
|
|
15
|
+
return string.replace(/([a-z])([A-Z])/g, '$1 $2');
|
|
16
|
+
}
|
|
17
|
+
// Build the subproperty key for a fleeting access (e.g. `opts.Boons` -> "Boons" / "boons").
|
|
18
|
+
// Prompt results are resolved with lowercased field-name keys (the datamodel stores prompt
|
|
19
|
+
// fields lowercased), so subproperty access on a prompt-backed fleeting must lowercase to
|
|
20
|
+
// match -- otherwise `opts.Boons` reads `undefined`. Other fleetings (rolls, etc.) expose
|
|
21
|
+
// real JS properties whose case must be preserved (e.g. `amount.total`), so the gate matters.
|
|
22
|
+
function fleetingSubProperty(expression) {
|
|
23
|
+
var _a;
|
|
24
|
+
if (expression.subProperty == undefined)
|
|
25
|
+
return undefined;
|
|
26
|
+
return isPrompt((_a = expression.variable.ref) === null || _a === void 0 ? void 0 : _a.value) ? expression.subProperty.toLowerCase() : expression.subProperty;
|
|
27
|
+
}
|
|
28
|
+
export function translateDiceParts(expression, noLabels = false) {
|
|
29
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37;
|
|
30
|
+
console.log("Translating Dice Part: ", expression.$type);
|
|
31
|
+
if (isLiteral(expression)) {
|
|
32
|
+
if (typeof expression.val == "string") {
|
|
33
|
+
return expandToNode `
|
|
34
|
+
"${expression.val}"
|
|
35
|
+
`;
|
|
36
|
+
}
|
|
37
|
+
return expandToNode `
|
|
38
|
+
"${expression.val}"
|
|
39
|
+
`;
|
|
40
|
+
}
|
|
41
|
+
if (isRef(expression)) {
|
|
42
|
+
// If string or number, return the value
|
|
43
|
+
if (typeof expression.val == "string" || typeof expression.val == "number") {
|
|
44
|
+
return expandToNode `
|
|
45
|
+
"${expression.val}"
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
if (expression.val.ref == undefined) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (expression.subProperties != undefined && expression.subProperties.length > 0) {
|
|
52
|
+
const subLabel = noLabels ? "" : `[${humanize(expression.subProperties[0])}]`;
|
|
53
|
+
return expandToNode `
|
|
54
|
+
"@${(_a = expression.val.ref) === null || _a === void 0 ? void 0 : _a.name}${expression.subProperties[0].toLowerCase()}${subLabel}"
|
|
55
|
+
`;
|
|
56
|
+
}
|
|
57
|
+
console.log("Ref:", `${expression.val.$refText}`);
|
|
58
|
+
if (IntelligentSystemDesignLanguageTerminals.DICE.test(`${expression.val}`)) {
|
|
59
|
+
return expandToNode `
|
|
60
|
+
"${expression.val}"
|
|
61
|
+
`;
|
|
62
|
+
}
|
|
63
|
+
const refLabel = noLabels ? "" : `[${humanize((_c = (_b = expression.val.ref) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : expression.val.$refText)}]`;
|
|
64
|
+
return expandToNode `
|
|
65
|
+
"@${(_f = (_e = (_d = expression.val.ref) === null || _d === void 0 ? void 0 : _d.name) === null || _e === void 0 ? void 0 : _e.toLowerCase()) !== null && _f !== void 0 ? _f : expression.val.$refText}${refLabel}"
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
if (isParentAccess(expression)) {
|
|
69
|
+
let path = (_j = (_h = (_g = expression.property) === null || _g === void 0 ? void 0 : _g.ref) === null || _h === void 0 ? void 0 : _h.name) !== null && _j !== void 0 ? _j : "";
|
|
70
|
+
let label = humanize((_m = (_l = (_k = expression.property) === null || _k === void 0 ? void 0 : _k.ref) === null || _l === void 0 ? void 0 : _l.name) !== null && _m !== void 0 ? _m : "");
|
|
71
|
+
const document = getParentDocument(expression);
|
|
72
|
+
if (document != undefined) {
|
|
73
|
+
path = `${document.name.toLowerCase()}${path}`;
|
|
74
|
+
label = `${humanize(document.name)} ${label}`;
|
|
75
|
+
}
|
|
76
|
+
// else if ( expression.propertyLookup != undefined ) {
|
|
77
|
+
// path = `${path}${expression.propertyLookup.ref?.name.toLowerCase()}`;
|
|
78
|
+
// label = `${label} \${context.object.system.${expression.propertyLookup.ref?.name.toLowerCase()}\}`;
|
|
79
|
+
// }
|
|
80
|
+
else {
|
|
81
|
+
path = `${path}${(_p = (_o = expression.property) === null || _o === void 0 ? void 0 : _o.ref) === null || _p === void 0 ? void 0 : _p.name.toLowerCase()}`;
|
|
82
|
+
label = `${label} ${humanize((_s = (_r = (_q = expression.property) === null || _q === void 0 ? void 0 : _q.ref) === null || _r === void 0 ? void 0 : _r.name) !== null && _s !== void 0 ? _s : "")}`;
|
|
83
|
+
}
|
|
84
|
+
for (const subProperty of (_t = expression.subProperties) !== null && _t !== void 0 ? _t : []) {
|
|
85
|
+
path = `${path}${subProperty}`;
|
|
86
|
+
label = `${label} ${humanize(subProperty)}`;
|
|
87
|
+
}
|
|
88
|
+
label = label.trim();
|
|
89
|
+
const parentLabelSuffix = noLabels ? "" : `[${label}]`;
|
|
90
|
+
return expandToNode `
|
|
91
|
+
\`@${path.replaceAll(".", "").toLowerCase()}${parentLabelSuffix}\`
|
|
92
|
+
`;
|
|
93
|
+
}
|
|
94
|
+
if (isTargetAccess(expression)) {
|
|
95
|
+
let path = (_w = (_v = (_u = expression.property) === null || _u === void 0 ? void 0 : _u.ref) === null || _v === void 0 ? void 0 : _v.name) !== null && _w !== void 0 ? _w : "";
|
|
96
|
+
let label = humanize((_z = (_y = (_x = expression.property) === null || _x === void 0 ? void 0 : _x.ref) === null || _y === void 0 ? void 0 : _y.name) !== null && _z !== void 0 ? _z : "");
|
|
97
|
+
const document = getTargetDocument(expression);
|
|
98
|
+
if (document != undefined) {
|
|
99
|
+
path = `${document.name.toLowerCase()}${path}`;
|
|
100
|
+
label = `${humanize(document.name)} ${label}`;
|
|
101
|
+
}
|
|
102
|
+
// else if ( expression.propertyLookup != undefined ) {
|
|
103
|
+
// path = `${path}${expression.propertyLookup.ref?.name.toLowerCase()}`;
|
|
104
|
+
// label = `${label} \${context.object.system.${expression.propertyLookup.ref?.name.toLowerCase()}\}`;
|
|
105
|
+
// }
|
|
106
|
+
else {
|
|
107
|
+
path = `${path}${(_1 = (_0 = expression.property) === null || _0 === void 0 ? void 0 : _0.ref) === null || _1 === void 0 ? void 0 : _1.name.toLowerCase()}`;
|
|
108
|
+
label = `${label} ${humanize((_4 = (_3 = (_2 = expression.property) === null || _2 === void 0 ? void 0 : _2.ref) === null || _3 === void 0 ? void 0 : _3.name) !== null && _4 !== void 0 ? _4 : "")}`;
|
|
109
|
+
}
|
|
110
|
+
for (const subProperty of (_5 = expression.subProperties) !== null && _5 !== void 0 ? _5 : []) {
|
|
111
|
+
path = `${path}${subProperty}`;
|
|
112
|
+
label = `${label} ${humanize(subProperty)}`;
|
|
113
|
+
}
|
|
114
|
+
label = label.trim();
|
|
115
|
+
const targetLabelSuffix = noLabels ? "" : `[${label}]`;
|
|
116
|
+
return expandToNode `
|
|
117
|
+
\`@${path.replaceAll(".", "").toLowerCase()}${targetLabelSuffix}\`
|
|
118
|
+
`;
|
|
119
|
+
}
|
|
120
|
+
if (isPromptInputAccess(expression)) {
|
|
121
|
+
// `input.X` inside a prompt -> @<field> ref token (resolved at runtime from
|
|
122
|
+
// the live reactive prompt data, see translateDiceData).
|
|
123
|
+
let key = (_9 = (_8 = (_7 = (_6 = expression.property) === null || _6 === void 0 ? void 0 : _6.ref) === null || _7 === void 0 ? void 0 : _7.name) === null || _8 === void 0 ? void 0 : _8.toLowerCase()) !== null && _9 !== void 0 ? _9 : "";
|
|
124
|
+
for (const subProperty of (_10 = expression.subProperties) !== null && _10 !== void 0 ? _10 : []) {
|
|
125
|
+
key = `${key}.${subProperty}`;
|
|
126
|
+
}
|
|
127
|
+
return expandToNode `
|
|
128
|
+
\`@${key.replaceAll(".", "").toLowerCase()}\`
|
|
129
|
+
`;
|
|
130
|
+
}
|
|
131
|
+
if (isAccess(expression)) {
|
|
132
|
+
let path = (_18 = (_14 = (_13 = (_12 = (_11 = expression.property) === null || _11 === void 0 ? void 0 : _11.ref) === null || _12 === void 0 ? void 0 : _12.name) === null || _13 === void 0 ? void 0 : _13.toLowerCase()) !== null && _14 !== void 0 ? _14 : (_17 = (_16 = (_15 = expression.propertyLookup) === null || _15 === void 0 ? void 0 : _15.ref) === null || _16 === void 0 ? void 0 : _16.name) === null || _17 === void 0 ? void 0 : _17.toLowerCase()) !== null && _18 !== void 0 ? _18 : "";
|
|
133
|
+
let label = humanize((_24 = (_21 = (_20 = (_19 = expression.property) === null || _19 === void 0 ? void 0 : _19.ref) === null || _20 === void 0 ? void 0 : _20.name) !== null && _21 !== void 0 ? _21 : (_23 = (_22 = expression.propertyLookup) === null || _22 === void 0 ? void 0 : _22.ref) === null || _23 === void 0 ? void 0 : _23.name) !== null && _24 !== void 0 ? _24 : "");
|
|
134
|
+
// if (isDieField(expression.property?.ref)) {
|
|
135
|
+
// return expandToNode`
|
|
136
|
+
// \'@${path.replaceAll(".", "")}\'
|
|
137
|
+
// `;
|
|
138
|
+
// }
|
|
139
|
+
// Special handling for document choices - expand into individual terms
|
|
140
|
+
if (expression.property && isDocumentChoicesExp(expression.property.ref) && expression.subProperties && expression.subProperties.length > 0) {
|
|
141
|
+
const choicesFieldName = expression.property.ref.name.toLowerCase();
|
|
142
|
+
const subPropertyName = expression.subProperties[0].toLowerCase();
|
|
143
|
+
const subPropertyLabel = humanize(expression.subProperties[0]);
|
|
144
|
+
// Generate dynamic expansion for each document in the choices array
|
|
145
|
+
return expandToNode `
|
|
146
|
+
context.object.system.${choicesFieldName}.map((doc, index) => {
|
|
147
|
+
if (!doc || !doc.system) return '';
|
|
148
|
+
return '@' + doc.uuid.replace(/[^a-zA-Z0-9]/g, '').toLowerCase() + '${subPropertyName}[' + doc.name + ' ${subPropertyLabel}]';
|
|
149
|
+
}).filter(Boolean).join(' + ')
|
|
150
|
+
`;
|
|
151
|
+
}
|
|
152
|
+
if (isParentPropertyRefExp((_25 = expression.property) === null || _25 === void 0 ? void 0 : _25.ref)) {
|
|
153
|
+
label = `${label} - \${context.object.system.${(_27 = (_26 = expression.property) === null || _26 === void 0 ? void 0 : _26.ref) === null || _27 === void 0 ? void 0 : _27.name.toLowerCase()}.replace("system.", "").replaceAll(".", " ").titleCase()\}`;
|
|
154
|
+
}
|
|
155
|
+
else if (isSelfPropertyRefExp((_28 = expression.property) === null || _28 === void 0 ? void 0 : _28.ref)) {
|
|
156
|
+
label = `${label} - \${context.object.system.${(_30 = (_29 = expression.property) === null || _29 === void 0 ? void 0 : _29.ref) === null || _30 === void 0 ? void 0 : _30.name.toLowerCase()}.replace("system.", "").replaceAll(".", " ").titleCase()\}`;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
for (const subProperty of (_31 = expression.subProperties) !== null && _31 !== void 0 ? _31 : []) {
|
|
160
|
+
path = `${path}.${subProperty}`;
|
|
161
|
+
label = `${label} ${humanize(subProperty)}`;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
console.log("Access:", path, label);
|
|
165
|
+
const accessLabelSuffix = noLabels ? "" : `[${label}]`;
|
|
166
|
+
return expandToNode `
|
|
167
|
+
\`@${path.replaceAll(".", "").toLowerCase()}${accessLabelSuffix}\`
|
|
168
|
+
`;
|
|
169
|
+
}
|
|
170
|
+
if (isFleetingAccess(expression)) {
|
|
171
|
+
// If this is a roll expression, just output it directly
|
|
172
|
+
if (isRoll((_32 = expression.variable.ref) === null || _32 === void 0 ? void 0 : _32.value)) {
|
|
173
|
+
return expandToNode `
|
|
174
|
+
${(_33 = expression.variable.ref) === null || _33 === void 0 ? void 0 : _33.name}
|
|
175
|
+
`;
|
|
176
|
+
}
|
|
177
|
+
let path = (_35 = (_34 = expression.variable.ref) === null || _34 === void 0 ? void 0 : _34.name) !== null && _35 !== void 0 ? _35 : "";
|
|
178
|
+
let label = humanize((_37 = (_36 = expression.variable.ref) === null || _36 === void 0 ? void 0 : _36.name) !== null && _37 !== void 0 ? _37 : "");
|
|
179
|
+
if (expression.subProperty != undefined) {
|
|
180
|
+
path = `${path}.${fleetingSubProperty(expression)}`;
|
|
181
|
+
label = `${label} ${humanize(expression.subProperty)}`;
|
|
182
|
+
}
|
|
183
|
+
const fleetingLabelSuffix = noLabels ? "" : `[${label}]`;
|
|
184
|
+
return expandToNode `
|
|
185
|
+
\`@${path.replaceAll(".", "").toLowerCase()}${fleetingLabelSuffix}\`
|
|
186
|
+
`;
|
|
187
|
+
}
|
|
188
|
+
if (isBinaryExpression(expression)) {
|
|
189
|
+
return expandToNode `
|
|
190
|
+
${translateDiceParts(expression.e1, noLabels)} + "${expression.op}" + ${translateDiceParts(expression.e2, noLabels)}
|
|
191
|
+
`;
|
|
192
|
+
}
|
|
193
|
+
if (isGroup(expression)) {
|
|
194
|
+
return expandToNode `
|
|
195
|
+
"(" + ${translateDiceParts(expression.ge, noLabels)} + ")"
|
|
196
|
+
`;
|
|
197
|
+
}
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
function translateDisplayFormula(expression) {
|
|
201
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
202
|
+
if (isLiteral(expression)) {
|
|
203
|
+
return `${expression.val}`;
|
|
204
|
+
}
|
|
205
|
+
if (isGroup(expression)) {
|
|
206
|
+
const inner = translateDisplayFormula(expression.ge);
|
|
207
|
+
return inner != null ? `(${inner})` : undefined;
|
|
208
|
+
}
|
|
209
|
+
if (isBinaryExpression(expression)) {
|
|
210
|
+
const left = translateDisplayFormula(expression.e1);
|
|
211
|
+
const right = translateDisplayFormula(expression.e2);
|
|
212
|
+
return left != null && right != null ? `${left} ${expression.op} ${right}` : undefined;
|
|
213
|
+
}
|
|
214
|
+
if (isAccess(expression)) {
|
|
215
|
+
if (isParentPropertyRefExp((_a = expression.property) === null || _a === void 0 ? void 0 : _a.ref) || isSelfPropertyRefExp((_b = expression.property) === null || _b === void 0 ? void 0 : _b.ref)) {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
let label = humanize((_h = (_e = (_d = (_c = expression.property) === null || _c === void 0 ? void 0 : _c.ref) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : (_g = (_f = expression.propertyLookup) === null || _f === void 0 ? void 0 : _f.ref) === null || _g === void 0 ? void 0 : _g.name) !== null && _h !== void 0 ? _h : "");
|
|
219
|
+
for (const sub of (_j = expression.subProperties) !== null && _j !== void 0 ? _j : []) {
|
|
220
|
+
label += ` ${humanize(sub)}`;
|
|
221
|
+
}
|
|
222
|
+
return label.trim();
|
|
223
|
+
}
|
|
224
|
+
if (isParentAccess(expression)) {
|
|
225
|
+
return humanize((_m = (_l = (_k = expression.property) === null || _k === void 0 ? void 0 : _k.ref) === null || _l === void 0 ? void 0 : _l.name) !== null && _m !== void 0 ? _m : "");
|
|
226
|
+
}
|
|
227
|
+
if (isTargetAccess(expression)) {
|
|
228
|
+
return humanize((_q = (_p = (_o = expression.property) === null || _o === void 0 ? void 0 : _o.ref) === null || _p === void 0 ? void 0 : _p.name) !== null && _q !== void 0 ? _q : "");
|
|
229
|
+
}
|
|
230
|
+
if (isFleetingAccess(expression)) {
|
|
231
|
+
return humanize((_s = (_r = expression.variable.ref) === null || _r === void 0 ? void 0 : _r.name) !== null && _s !== void 0 ? _s : "");
|
|
232
|
+
}
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
export function translateDiceData(expression, entry, id, preDerived, generatingProperty) {
|
|
236
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61;
|
|
237
|
+
console.log("Translating Dice Data: ", expression.$type);
|
|
238
|
+
if (isParentAccess(expression)) {
|
|
239
|
+
let path = "context.object.parent.system";
|
|
240
|
+
let label = (_c = (_b = (_a = expression.property) === null || _a === void 0 ? void 0 : _a.ref) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : "";
|
|
241
|
+
console.log("Parent Access:", (_e = (_d = expression.property) === null || _d === void 0 ? void 0 : _d.ref) === null || _e === void 0 ? void 0 : _e.name);
|
|
242
|
+
const document = getParentDocument(expression);
|
|
243
|
+
if (document != undefined) {
|
|
244
|
+
path = `${path}.${(_h = (_g = (_f = expression.property) === null || _f === void 0 ? void 0 : _f.ref) === null || _g === void 0 ? void 0 : _g.name) === null || _h === void 0 ? void 0 : _h.toLowerCase()}`;
|
|
245
|
+
label = `${humanize(document.name)}.${label}`;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
path = `${path}.${(_l = (_k = (_j = expression.property) === null || _j === void 0 ? void 0 : _j.ref) === null || _k === void 0 ? void 0 : _k.name) === null || _l === void 0 ? void 0 : _l.toLowerCase()}`;
|
|
249
|
+
label = `${label}.${expression.property}`;
|
|
250
|
+
}
|
|
251
|
+
for (const subProperty of (_m = expression.subProperties) !== null && _m !== void 0 ? _m : []) {
|
|
252
|
+
path = `${path}.${subProperty}`;
|
|
253
|
+
label = `${label}.${subProperty}`;
|
|
254
|
+
}
|
|
255
|
+
return expandToNode `
|
|
256
|
+
"${label.replaceAll(".", "").toLowerCase()}": ${path}
|
|
257
|
+
`;
|
|
258
|
+
}
|
|
259
|
+
if (isTargetAccess(expression)) {
|
|
260
|
+
let path = "context.target.system";
|
|
261
|
+
let label = (_q = (_p = (_o = expression.property) === null || _o === void 0 ? void 0 : _o.ref) === null || _p === void 0 ? void 0 : _p.name) !== null && _q !== void 0 ? _q : "";
|
|
262
|
+
console.log("Target Access:", (_s = (_r = expression.property) === null || _r === void 0 ? void 0 : _r.ref) === null || _s === void 0 ? void 0 : _s.name);
|
|
263
|
+
const document = getTargetDocument(expression);
|
|
264
|
+
if (document != undefined) {
|
|
265
|
+
path = `${path}.${(_v = (_u = (_t = expression.property) === null || _t === void 0 ? void 0 : _t.ref) === null || _u === void 0 ? void 0 : _u.name) === null || _v === void 0 ? void 0 : _v.toLowerCase()}`;
|
|
266
|
+
label = `${humanize(document.name)}.${label}`;
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
path = `${path}.${(_y = (_x = (_w = expression.property) === null || _w === void 0 ? void 0 : _w.ref) === null || _x === void 0 ? void 0 : _x.name) === null || _y === void 0 ? void 0 : _y.toLowerCase()}`;
|
|
270
|
+
label = `${label}.${expression.property}`;
|
|
271
|
+
}
|
|
272
|
+
for (const subProperty of (_z = expression.subProperties) !== null && _z !== void 0 ? _z : []) {
|
|
273
|
+
path = `${path}.${subProperty}`;
|
|
274
|
+
label = `${label}.${subProperty}`;
|
|
275
|
+
}
|
|
276
|
+
return expandToNode `
|
|
277
|
+
"${label.replaceAll(".", "").toLowerCase()}": ${path}
|
|
278
|
+
`;
|
|
279
|
+
}
|
|
280
|
+
if (isPromptInputAccess(expression)) {
|
|
281
|
+
// Resolve `input.X` to the LIVE reactive prompt path the input writes to:
|
|
282
|
+
// context.system.<action><variable>.<field>. Editing the input recomputes
|
|
283
|
+
// any binding that reads this (the rollVisualizer's :rollData).
|
|
284
|
+
const prompt = AstUtils.getContainerOfType(expression, isPrompt);
|
|
285
|
+
const variable = AstUtils.getContainerOfType(prompt === null || prompt === void 0 ? void 0 : prompt.$container, isVariableExpression);
|
|
286
|
+
const action = AstUtils.getContainerOfType(prompt === null || prompt === void 0 ? void 0 : prompt.$container, isAction);
|
|
287
|
+
const promptPath = `${(_0 = action === null || action === void 0 ? void 0 : action.name.toLowerCase()) !== null && _0 !== void 0 ? _0 : ""}${(_1 = variable === null || variable === void 0 ? void 0 : variable.name.toLowerCase()) !== null && _1 !== void 0 ? _1 : ""}`;
|
|
288
|
+
const ref = (_2 = expression.property) === null || _2 === void 0 ? void 0 : _2.ref;
|
|
289
|
+
const fieldName = (_4 = (_3 = ref === null || ref === void 0 ? void 0 : ref.name) === null || _3 === void 0 ? void 0 : _3.toLowerCase()) !== null && _4 !== void 0 ? _4 : "";
|
|
290
|
+
const base = `context.system.${promptPath}.${fieldName}`;
|
|
291
|
+
const hasSub = ((_6 = (_5 = expression.subProperties) === null || _5 === void 0 ? void 0 : _5.length) !== null && _6 !== void 0 ? _6 : 0) > 0;
|
|
292
|
+
// A dice prompt input is stored as {die, number} (its `.value` formula is derived
|
|
293
|
+
// data, which a prompt doesn't compute). Build the "<number><die>" formula string
|
|
294
|
+
// so it drops into the roll as e.g. "2d6"; reading both keeps it reactive.
|
|
295
|
+
if (isDiceField(ref) && !hasSub) {
|
|
296
|
+
return expandToNode `
|
|
297
|
+
"${fieldName}": \`\${${base}.number}\${${base}.die}\`
|
|
298
|
+
`;
|
|
299
|
+
}
|
|
300
|
+
// A die prompt input is stored as the die string itself (e.g. "d8").
|
|
301
|
+
if (isDieField(ref) && !hasSub) {
|
|
302
|
+
return expandToNode `
|
|
303
|
+
"${fieldName}": ${base}
|
|
304
|
+
`;
|
|
305
|
+
}
|
|
306
|
+
let key = fieldName;
|
|
307
|
+
let dataPath = base;
|
|
308
|
+
for (const subProperty of (_7 = expression.subProperties) !== null && _7 !== void 0 ? _7 : []) {
|
|
309
|
+
key = `${key}.${subProperty}`;
|
|
310
|
+
dataPath = `${dataPath}.${subProperty.toLowerCase()}`;
|
|
311
|
+
}
|
|
312
|
+
return expandToNode `
|
|
313
|
+
"${key.replaceAll(".", "").toLowerCase()}": ${dataPath} ?? 0
|
|
314
|
+
`;
|
|
315
|
+
}
|
|
316
|
+
if (isAccess(expression)) {
|
|
317
|
+
let path = "context.object.system";
|
|
318
|
+
let label = "";
|
|
319
|
+
console.log("Access:", (_9 = (_8 = expression.property) === null || _8 === void 0 ? void 0 : _8.ref) === null || _9 === void 0 ? void 0 : _9.name, (_11 = (_10 = expression.propertyLookup) === null || _10 === void 0 ? void 0 : _10.ref) === null || _11 === void 0 ? void 0 : _11.name);
|
|
320
|
+
if (expression.propertyLookup != undefined) {
|
|
321
|
+
path = `${path}[context.object.${getSystemPath(expression.propertyLookup.ref)}.toLowerCase()]`;
|
|
322
|
+
label = `${(_12 = expression.propertyLookup.ref) === null || _12 === void 0 ? void 0 : _12.name}`;
|
|
323
|
+
}
|
|
324
|
+
else if (isParentPropertyRefExp((_13 = expression.property) === null || _13 === void 0 ? void 0 : _13.ref)) {
|
|
325
|
+
path = `${path}.${(_15 = (_14 = expression.property) === null || _14 === void 0 ? void 0 : _14.ref) === null || _15 === void 0 ? void 0 : _15.name.toLowerCase()}`;
|
|
326
|
+
label = `${(_17 = (_16 = expression.property) === null || _16 === void 0 ? void 0 : _16.ref) === null || _17 === void 0 ? void 0 : _17.name}`;
|
|
327
|
+
let subProperty = "";
|
|
328
|
+
if (((_18 = expression.property) === null || _18 === void 0 ? void 0 : _18.ref.propertyType) == "resource" || ((_19 = expression.property) === null || _19 === void 0 ? void 0 : _19.ref.propertyType) == "tracker" || ((_20 = expression.property) === null || _20 === void 0 ? void 0 : _20.ref.propertyType) == "choice"
|
|
329
|
+
&& (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "value")) {
|
|
330
|
+
subProperty = "?.value";
|
|
331
|
+
}
|
|
332
|
+
if (((_21 = expression.property) === null || _21 === void 0 ? void 0 : _21.ref.propertyType) == "attribute" && (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "mod")) {
|
|
333
|
+
subProperty = "?.mod";
|
|
334
|
+
}
|
|
335
|
+
console.log(label, path);
|
|
336
|
+
return expandToNode `
|
|
337
|
+
"${label.replaceAll(".", "").replaceAll(" ", "").toLowerCase()}": foundry.utils.getProperty(context.object.parent, ${path}.toLowerCase())${subProperty}
|
|
338
|
+
`;
|
|
339
|
+
}
|
|
340
|
+
else if (isSelfPropertyRefExp((_22 = expression.property) === null || _22 === void 0 ? void 0 : _22.ref)) {
|
|
341
|
+
// For self property references, we dynamically resolve the property path
|
|
342
|
+
let selfPropertyPath = `context.object.system.${(_24 = (_23 = expression.property) === null || _23 === void 0 ? void 0 : _23.ref) === null || _24 === void 0 ? void 0 : _24.name.toLowerCase()}`;
|
|
343
|
+
let subProperty = "";
|
|
344
|
+
label = `${(_26 = (_25 = expression.property) === null || _25 === void 0 ? void 0 : _25.ref) === null || _26 === void 0 ? void 0 : _26.name}`;
|
|
345
|
+
if (((_27 = expression.property) === null || _27 === void 0 ? void 0 : _27.ref.propertyType) == "resource" || ((_28 = expression.property) === null || _28 === void 0 ? void 0 : _28.ref.propertyType) == "tracker" || ((_29 = expression.property) === null || _29 === void 0 ? void 0 : _29.ref.propertyType) == "choice"
|
|
346
|
+
&& (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "value")) {
|
|
347
|
+
subProperty = "?.value";
|
|
348
|
+
}
|
|
349
|
+
if (((_30 = expression.property) === null || _30 === void 0 ? void 0 : _30.ref.propertyType) == "attribute" && (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "mod")) {
|
|
350
|
+
subProperty = "?.mod";
|
|
351
|
+
}
|
|
352
|
+
console.log(label, selfPropertyPath);
|
|
353
|
+
return expandToNode `
|
|
354
|
+
"${label.replaceAll(".", "").replaceAll(" ", "").toLowerCase()}": foundry.utils.getProperty(context.object, "system." + ${selfPropertyPath}.toLowerCase())${subProperty}
|
|
355
|
+
`;
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
// Special handling for document choices - expand into individual data entries
|
|
359
|
+
if (expression.property && isDocumentChoicesExp(expression.property.ref) && expression.subProperties && expression.subProperties.length > 0) {
|
|
360
|
+
const choicesFieldName = expression.property.ref.name.toLowerCase();
|
|
361
|
+
const subPropertyName = expression.subProperties[0].toLowerCase();
|
|
362
|
+
// Generate data for each document in the choices array
|
|
363
|
+
return expandToNode `
|
|
364
|
+
...Object.fromEntries(context.object.system.${choicesFieldName}.map((doc, index) => {
|
|
365
|
+
if (!doc || !doc.system) return null;
|
|
366
|
+
|
|
367
|
+
// Determine the accessor based on property type
|
|
368
|
+
let accessor = '.${subPropertyName}';
|
|
369
|
+
${isResourceExp((_31 = expression.property) === null || _31 === void 0 ? void 0 : _31.ref) || isTrackerExp((_32 = expression.property) === null || _32 === void 0 ? void 0 : _32.ref) ? `
|
|
370
|
+
if (doc.system.${subPropertyName} && typeof doc.system.${subPropertyName} === 'object' && 'value' in doc.system.${subPropertyName}) {
|
|
371
|
+
accessor = '.${subPropertyName}.value';
|
|
372
|
+
}` : ''}
|
|
373
|
+
${isAttributeExp((_33 = expression.property) === null || _33 === void 0 ? void 0 : _33.ref) ? `
|
|
374
|
+
if (doc.system.${subPropertyName} && typeof doc.system.${subPropertyName} === 'object' && 'mod' in doc.system.${subPropertyName}) {
|
|
375
|
+
accessor = '.${subPropertyName}.mod';
|
|
376
|
+
}` : ''}
|
|
377
|
+
|
|
378
|
+
const key = doc.uuid.replace(/[^a-zA-Z0-9]/g, '').toLowerCase() + '${subPropertyName}';
|
|
379
|
+
const value = foundry.utils.getProperty(doc, 'system' + accessor) ?? 0;
|
|
380
|
+
return [key, value];
|
|
381
|
+
}).filter(Boolean))
|
|
382
|
+
`;
|
|
383
|
+
}
|
|
384
|
+
path = `${path}.${(_35 = (_34 = expression.property) === null || _34 === void 0 ? void 0 : _34.ref) === null || _35 === void 0 ? void 0 : _35.name.toLowerCase()}`;
|
|
385
|
+
label = `${(_37 = (_36 = expression.property) === null || _36 === void 0 ? void 0 : _36.ref) === null || _37 === void 0 ? void 0 : _37.name}`;
|
|
386
|
+
if ((isResourceExp((_38 = expression.property) === null || _38 === void 0 ? void 0 : _38.ref) || isTrackerExp((_39 = expression.property) === null || _39 === void 0 ? void 0 : _39.ref) || isStringChoiceField((_40 = expression.property) === null || _40 === void 0 ? void 0 : _40.ref))
|
|
387
|
+
&& (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] == "value")) {
|
|
388
|
+
path = `${path}.value`;
|
|
389
|
+
}
|
|
390
|
+
if (isDiceField((_41 = expression.property) === null || _41 === void 0 ? void 0 : _41.ref) && (expression.subProperties == undefined || expression.subProperties.length == 0)) {
|
|
391
|
+
// For dice fields without subproperties, use the dice value
|
|
392
|
+
path = `${path}.value`;
|
|
393
|
+
}
|
|
394
|
+
if (isDieField((_42 = expression.property) === null || _42 === void 0 ? void 0 : _42.ref)) {
|
|
395
|
+
// For die fields, the value is just the die size (e.g., "d6"), we want to use the field name as label
|
|
396
|
+
// Don't change the path, just ensure the label is the field name
|
|
397
|
+
}
|
|
398
|
+
if (isAttributeExp((_43 = expression.property) === null || _43 === void 0 ? void 0 : _43.ref) && (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "mod")) {
|
|
399
|
+
path = `${path}.mod`;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
for (const subProperty of (_44 = expression.subProperties) !== null && _44 !== void 0 ? _44 : []) {
|
|
403
|
+
path = `${path}.${subProperty}`;
|
|
404
|
+
label = `${label} ${humanize(subProperty)}`;
|
|
405
|
+
}
|
|
406
|
+
console.log(label, path);
|
|
407
|
+
return expandToNode `
|
|
408
|
+
"${label.replaceAll(".", "").replaceAll(" ", "").toLowerCase()}": ${path} ?? 0
|
|
409
|
+
`;
|
|
410
|
+
}
|
|
411
|
+
if (isFleetingAccess(expression)) {
|
|
412
|
+
console.log("Fleeting Access:", (_45 = expression.variable.ref) === null || _45 === void 0 ? void 0 : _45.name);
|
|
413
|
+
// If this is a roll expression, just skip it
|
|
414
|
+
if (isRoll((_46 = expression.variable.ref) === null || _46 === void 0 ? void 0 : _46.value)) {
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
let path = (_47 = expression.variable.ref) === null || _47 === void 0 ? void 0 : _47.name;
|
|
418
|
+
// The roll-data key must match the formula's `@`-reference, which collapses the
|
|
419
|
+
// dotted path and lowercases it (see translateDiceParts: `@answer.bonus` -> `@answerbonus`).
|
|
420
|
+
let label = (_50 = (_49 = (_48 = expression.variable.ref) === null || _48 === void 0 ? void 0 : _48.name) === null || _49 === void 0 ? void 0 : _49.toLowerCase()) !== null && _50 !== void 0 ? _50 : "";
|
|
421
|
+
if (expression.subProperty != undefined) {
|
|
422
|
+
path = `${path}.${fleetingSubProperty(expression)}`;
|
|
423
|
+
label = `${label}${expression.subProperty.toLowerCase()}`;
|
|
424
|
+
}
|
|
425
|
+
if (expression.arrayAccess != undefined) {
|
|
426
|
+
console.log("Array Access:", expression.arrayAccess.$type);
|
|
427
|
+
let accessExp = translateExpression(entry, id, expression.arrayAccess, preDerived, generatingProperty);
|
|
428
|
+
path = `${path}[${(_51 = accessExp === null || accessExp === void 0 ? void 0 : accessExp.contents) === null || _51 === void 0 ? void 0 : _51.toString()}]`;
|
|
429
|
+
}
|
|
430
|
+
console.log(label, path);
|
|
431
|
+
return expandToNode `
|
|
432
|
+
"${label}": ${path} ?? 0
|
|
433
|
+
`;
|
|
434
|
+
}
|
|
435
|
+
// if (isVariableAccess(expression)) {
|
|
436
|
+
// console.log("Variable Access:", expression.name);
|
|
437
|
+
// if (isParameter(expression)) {
|
|
438
|
+
// console.log("Parameter:", expression.name);
|
|
439
|
+
// return expandToNode`
|
|
440
|
+
// "${expression.name}": ${expression.name}
|
|
441
|
+
// `;
|
|
442
|
+
// }
|
|
443
|
+
// if (isVariableExpression(expression)) {
|
|
444
|
+
// console.log("Variable Expression:", expression.name);
|
|
445
|
+
// if (isExpression(expression.value)) {
|
|
446
|
+
// console.log("Expression:", expression.name);
|
|
447
|
+
// return translateDiceData(expression.value);
|
|
448
|
+
// }
|
|
449
|
+
// if (isPrompt(expression.value)) {
|
|
450
|
+
// console.log("Prompt:", expression.name);
|
|
451
|
+
// return expandToNode`
|
|
452
|
+
// "${expression.name}": ${expression.name}
|
|
453
|
+
// `;
|
|
454
|
+
// }
|
|
455
|
+
// }
|
|
456
|
+
// throw new Error("Variable Access not implemented");
|
|
457
|
+
// }
|
|
458
|
+
if (isRef(expression)) {
|
|
459
|
+
console.log("Ref:", (_52 = expression.val.ref) === null || _52 === void 0 ? void 0 : _52.name);
|
|
460
|
+
// If string or number, return the value
|
|
461
|
+
if (typeof expression.val == "string" || typeof expression.val == "number") {
|
|
462
|
+
console.log(expression.val);
|
|
463
|
+
return expandToNode `
|
|
464
|
+
"${expression.val}": ${expression.val}
|
|
465
|
+
`;
|
|
466
|
+
}
|
|
467
|
+
if (expression.val.ref == undefined) {
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
if (expression.subProperties != undefined && expression.subProperties.length > 0) {
|
|
471
|
+
return expandToNode `
|
|
472
|
+
"${(_53 = expression.val.ref) === null || _53 === void 0 ? void 0 : _53.name.toLowerCase()}${expression.subProperties[0].toLowerCase()}": ${(_54 = expression.val.ref) === null || _54 === void 0 ? void 0 : _54.name}.${expression.subProperties[0].toLowerCase()} ?? 0
|
|
473
|
+
`;
|
|
474
|
+
}
|
|
475
|
+
console.log((_55 = expression.val.ref) === null || _55 === void 0 ? void 0 : _55.name, (_56 = expression.val.ref) === null || _56 === void 0 ? void 0 : _56.$type);
|
|
476
|
+
return expandToNode `
|
|
477
|
+
"${(_59 = (_58 = (_57 = expression.val.ref) === null || _57 === void 0 ? void 0 : _57.name) === null || _58 === void 0 ? void 0 : _58.toLowerCase()) !== null && _59 !== void 0 ? _59 : expression.val.$refText}": ${(_61 = (_60 = expression.val.ref) === null || _60 === void 0 ? void 0 : _60.name) !== null && _61 !== void 0 ? _61 : expression.val.$refText} ?? 0
|
|
478
|
+
`;
|
|
479
|
+
}
|
|
480
|
+
if (isBinaryExpression(expression)) {
|
|
481
|
+
const expressions = [expression.e1, expression.e2];
|
|
482
|
+
return expandToNode `
|
|
483
|
+
${joinToNode(expressions, e => translateDiceData(e, entry, id, preDerived, generatingProperty), { separator: ", " })}
|
|
484
|
+
`;
|
|
485
|
+
}
|
|
486
|
+
if (isGroup(expression)) {
|
|
487
|
+
return expandToNode `
|
|
488
|
+
${translateDiceData(expression.ge, entry, id, preDerived, generatingProperty)}
|
|
489
|
+
`;
|
|
490
|
+
}
|
|
491
|
+
return undefined;
|
|
492
|
+
}
|
|
6
493
|
export function translateExpression(entry, id, expression, preDerived = false, generatingProperty = undefined) {
|
|
7
494
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
|
|
8
495
|
function humanize(string) {
|
|
@@ -17,14 +504,14 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
17
504
|
//console.log(preDerived, generatingProperty);
|
|
18
505
|
function translateMethodExpression(expression) {
|
|
19
506
|
//console.log("Translating Method Expression: " + expression.name);
|
|
20
|
-
return expandToNode `
|
|
21
|
-
${expression.type == "fleeting" ? "let" : "const"} ${expression.name} = ${translateExpression(entry, id, expression.value, preDerived, generatingProperty)};
|
|
507
|
+
return expandToNode `
|
|
508
|
+
${expression.type == "fleeting" ? "let" : "const"} ${expression.name} = ${translateExpression(entry, id, expression.value, preDerived, generatingProperty)};
|
|
22
509
|
`;
|
|
23
510
|
}
|
|
24
511
|
function translateReturnExpression(expression) {
|
|
25
512
|
//console.log("Translating Return Expression: " + expression.value);
|
|
26
|
-
return expandToNode `
|
|
27
|
-
return ${translateExpression(entry, id, expression.value, preDerived, generatingProperty)};
|
|
513
|
+
return expandToNode `
|
|
514
|
+
return ${translateExpression(entry, id, expression.value, preDerived, generatingProperty)};
|
|
28
515
|
`;
|
|
29
516
|
}
|
|
30
517
|
function translateAssignmentExpression(expression) {
|
|
@@ -37,46 +524,46 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
37
524
|
const fieldName = (_e = (_d = expression.property) === null || _d === void 0 ? void 0 : _d.ref) === null || _e === void 0 ? void 0 : _e.name.toLowerCase();
|
|
38
525
|
const modifier = expression.term == "++" ? "+ 1" : "- 1";
|
|
39
526
|
const readPath = getSystemPath((_f = expression.property) === null || _f === void 0 ? void 0 : _f.ref, expression.subProperties, (_g = expression.propertyLookup) === null || _g === void 0 ? void 0 : _g.ref);
|
|
40
|
-
return expandToNode `
|
|
41
|
-
const ${fieldName}DieChoices = ["d4","d6","d8","d10","d12","d20"];
|
|
42
|
-
const ${fieldName}CurrentDieIndex = ${fieldName}DieChoices.indexOf(context.object.${readPath});
|
|
43
|
-
if (${fieldName}CurrentDieIndex === -1) {
|
|
44
|
-
console.error("Invalid die size: " + context.object.${readPath});
|
|
45
|
-
update["${systemPath}"] = 'd4';
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
let ${fieldName}NewDieIndex = ${fieldName}CurrentDieIndex;
|
|
49
|
-
${fieldName}NewDieIndex = Math.max(0, Math.min(${fieldName}DieChoices.length - 1, ${fieldName}CurrentDieIndex ${modifier}));
|
|
50
|
-
update["${systemPath}"] = ${fieldName}DieChoices[${fieldName}NewDieIndex];
|
|
527
|
+
return expandToNode `
|
|
528
|
+
const ${fieldName}DieChoices = ["d4","d6","d8","d10","d12","d20"];
|
|
529
|
+
const ${fieldName}CurrentDieIndex = ${fieldName}DieChoices.indexOf(context.object.${readPath});
|
|
530
|
+
if (${fieldName}CurrentDieIndex === -1) {
|
|
531
|
+
console.error("Invalid die size: " + context.object.${readPath});
|
|
532
|
+
update["${systemPath}"] = 'd4';
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
let ${fieldName}NewDieIndex = ${fieldName}CurrentDieIndex;
|
|
536
|
+
${fieldName}NewDieIndex = Math.max(0, Math.min(${fieldName}DieChoices.length - 1, ${fieldName}CurrentDieIndex ${modifier}));
|
|
537
|
+
update["${systemPath}"] = ${fieldName}DieChoices[${fieldName}NewDieIndex];
|
|
51
538
|
`;
|
|
52
539
|
}
|
|
53
540
|
if ((isResourceExp((_h = expression.property) === null || _h === void 0 ? void 0 : _h.ref) || isTrackerExp((_j = expression.property) === null || _j === void 0 ? void 0 : _j.ref)) && (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] == "temp")) {
|
|
54
541
|
// We need to check for temp first when decrementing
|
|
55
542
|
const tempPath = `system.${(_l = (_k = expression.property) === null || _k === void 0 ? void 0 : _k.ref) === null || _l === void 0 ? void 0 : _l.name.toLowerCase()}.temp`;
|
|
56
543
|
if (isIncrementDecrementAssignment(expression) && expression.term == "--") {
|
|
57
|
-
return expandToNode `
|
|
58
|
-
if ( context.object.${tempPath} > 0 ) {
|
|
59
|
-
update["${tempPath}"] = context.object.${tempPath} - 1;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
update["${systemPath}"] = context.object.${systemPath} - 1;
|
|
63
|
-
}
|
|
544
|
+
return expandToNode `
|
|
545
|
+
if ( context.object.${tempPath} > 0 ) {
|
|
546
|
+
update["${tempPath}"] = context.object.${tempPath} - 1;
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
update["${systemPath}"] = context.object.${systemPath} - 1;
|
|
550
|
+
}
|
|
64
551
|
`;
|
|
65
552
|
}
|
|
66
553
|
if (isQuickModifyAssignment(expression) && expression.term == "-=") {
|
|
67
|
-
return expandToNode `
|
|
68
|
-
if ( context.object.${tempPath} > 0 ) {
|
|
69
|
-
update["${tempPath}"] = context.object.${tempPath} - ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
70
|
-
|
|
71
|
-
if ( update["${tempPath}"] < 0 ) {
|
|
72
|
-
// Apply the remainder to the system property
|
|
73
|
-
update["${systemPath}"] = context.object.${systemPath} + update["${tempPath}"];
|
|
74
|
-
update["${tempPath}"] = 0;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
update["${systemPath}"] = context.object.${systemPath} - ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
79
|
-
}
|
|
554
|
+
return expandToNode `
|
|
555
|
+
if ( context.object.${tempPath} > 0 ) {
|
|
556
|
+
update["${tempPath}"] = context.object.${tempPath} - ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
557
|
+
|
|
558
|
+
if ( update["${tempPath}"] < 0 ) {
|
|
559
|
+
// Apply the remainder to the system property
|
|
560
|
+
update["${systemPath}"] = context.object.${systemPath} + update["${tempPath}"];
|
|
561
|
+
update["${tempPath}"] = 0;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
else {
|
|
565
|
+
update["${systemPath}"] = context.object.${systemPath} - ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
566
|
+
}
|
|
80
567
|
`;
|
|
81
568
|
}
|
|
82
569
|
}
|
|
@@ -88,8 +575,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
88
575
|
function generateModification() {
|
|
89
576
|
if (isIncrementDecrementAssignment(expression)) {
|
|
90
577
|
const modifier = expression.term == "++" ? "+" : "-";
|
|
91
|
-
return expandToNode `
|
|
92
|
-
${propertyName}NewDieIndex = Math.max(0, Math.min(${propertyName}DieChoices.length - 1, ${propertyName}CurrentDieIndex ${modifier} 1));
|
|
578
|
+
return expandToNode `
|
|
579
|
+
${propertyName}NewDieIndex = Math.max(0, Math.min(${propertyName}DieChoices.length - 1, ${propertyName}CurrentDieIndex ${modifier} 1));
|
|
93
580
|
`;
|
|
94
581
|
}
|
|
95
582
|
if (isQuickModifyAssignment(expression)) {
|
|
@@ -111,25 +598,25 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
111
598
|
modifier = "+";
|
|
112
599
|
break;
|
|
113
600
|
}
|
|
114
|
-
return expandToNode `
|
|
115
|
-
${propertyName}NewDieIndex = Math.max(0, Math.min(${propertyName}DieChoices.length - 1, ${propertyName}CurrentDieIndex ${modifier} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)}));
|
|
601
|
+
return expandToNode `
|
|
602
|
+
${propertyName}NewDieIndex = Math.max(0, Math.min(${propertyName}DieChoices.length - 1, ${propertyName}CurrentDieIndex ${modifier} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)}));
|
|
116
603
|
`;
|
|
117
604
|
}
|
|
118
|
-
return expandToNode `
|
|
119
|
-
${propertyName}NewDieIndex = Math.max(0, Math.min(${propertyName}DieChoices.length - 1, ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)}));
|
|
605
|
+
return expandToNode `
|
|
606
|
+
${propertyName}NewDieIndex = Math.max(0, Math.min(${propertyName}DieChoices.length - 1, ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)}));
|
|
120
607
|
`;
|
|
121
608
|
}
|
|
122
|
-
return expandToNode `
|
|
123
|
-
const ${propertyName}DieChoices = ${JSON.stringify(dieChoices)};
|
|
124
|
-
const ${propertyName}CurrentDieIndex = ${propertyName}DieChoices.indexOf(context.object.${systemPath});
|
|
125
|
-
if (${propertyName}CurrentDieIndex === -1) {
|
|
126
|
-
console.error("Invalid die size: " + context.object.${systemPath});
|
|
127
|
-
update["${systemPath}"] = '${dieChoices[0]}';
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
let ${propertyName}NewDieIndex = ${propertyName}CurrentDieIndex;
|
|
131
|
-
${generateModification()}
|
|
132
|
-
update["${systemPath}"] = ${propertyName}DieChoices[${propertyName}NewDieIndex];
|
|
609
|
+
return expandToNode `
|
|
610
|
+
const ${propertyName}DieChoices = ${JSON.stringify(dieChoices)};
|
|
611
|
+
const ${propertyName}CurrentDieIndex = ${propertyName}DieChoices.indexOf(context.object.${systemPath});
|
|
612
|
+
if (${propertyName}CurrentDieIndex === -1) {
|
|
613
|
+
console.error("Invalid die size: " + context.object.${systemPath});
|
|
614
|
+
update["${systemPath}"] = '${dieChoices[0]}';
|
|
615
|
+
return;
|
|
616
|
+
}
|
|
617
|
+
let ${propertyName}NewDieIndex = ${propertyName}CurrentDieIndex;
|
|
618
|
+
${generateModification()}
|
|
619
|
+
update["${systemPath}"] = ${propertyName}DieChoices[${propertyName}NewDieIndex];
|
|
133
620
|
`;
|
|
134
621
|
}
|
|
135
622
|
// Special case for dice fields with .die subproperty - use die choice navigation
|
|
@@ -138,23 +625,23 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
138
625
|
const fieldName = (_v = (_u = expression.property) === null || _u === void 0 ? void 0 : _u.ref) === null || _v === void 0 ? void 0 : _v.name.toLowerCase();
|
|
139
626
|
const modifier = expression.term == "++" ? "+ 1" : "- 1";
|
|
140
627
|
const readPath = getSystemPath((_w = expression.property) === null || _w === void 0 ? void 0 : _w.ref, expression.subProperties, (_x = expression.propertyLookup) === null || _x === void 0 ? void 0 : _x.ref);
|
|
141
|
-
return expandToNode `
|
|
142
|
-
const ${fieldName}DieChoices = ["d4","d6","d8","d10","d12","d20"];
|
|
143
|
-
const ${fieldName}CurrentDieIndex = ${fieldName}DieChoices.indexOf(context.object.${readPath});
|
|
144
|
-
if (${fieldName}CurrentDieIndex === -1) {
|
|
145
|
-
console.error("Invalid die size: " + context.object.${readPath});
|
|
146
|
-
update["${systemPath}"] = 'd4';
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
let ${fieldName}NewDieIndex = ${fieldName}CurrentDieIndex;
|
|
150
|
-
${fieldName}NewDieIndex = Math.max(0, Math.min(${fieldName}DieChoices.length - 1, ${fieldName}CurrentDieIndex ${modifier}));
|
|
151
|
-
update["${systemPath}"] = ${fieldName}DieChoices[${fieldName}NewDieIndex];
|
|
628
|
+
return expandToNode `
|
|
629
|
+
const ${fieldName}DieChoices = ["d4","d6","d8","d10","d12","d20"];
|
|
630
|
+
const ${fieldName}CurrentDieIndex = ${fieldName}DieChoices.indexOf(context.object.${readPath});
|
|
631
|
+
if (${fieldName}CurrentDieIndex === -1) {
|
|
632
|
+
console.error("Invalid die size: " + context.object.${readPath});
|
|
633
|
+
update["${systemPath}"] = 'd4';
|
|
634
|
+
return;
|
|
635
|
+
}
|
|
636
|
+
let ${fieldName}NewDieIndex = ${fieldName}CurrentDieIndex;
|
|
637
|
+
${fieldName}NewDieIndex = Math.max(0, Math.min(${fieldName}DieChoices.length - 1, ${fieldName}CurrentDieIndex ${modifier}));
|
|
638
|
+
update["${systemPath}"] = ${fieldName}DieChoices[${fieldName}NewDieIndex];
|
|
152
639
|
`;
|
|
153
640
|
}
|
|
154
641
|
if (isIncrementDecrementAssignment(expression)) {
|
|
155
642
|
const modifier = expression.term == "++" ? "+" : "-";
|
|
156
|
-
return expandToNode `
|
|
157
|
-
update["${systemPath}"] = context.object.${systemPath} ${modifier} 1;
|
|
643
|
+
return expandToNode `
|
|
644
|
+
update["${systemPath}"] = context.object.${systemPath} ${modifier} 1;
|
|
158
645
|
`;
|
|
159
646
|
}
|
|
160
647
|
if (isQuickModifyAssignment(expression)) {
|
|
@@ -176,12 +663,12 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
176
663
|
modifier = "+";
|
|
177
664
|
break;
|
|
178
665
|
}
|
|
179
|
-
return expandToNode `
|
|
180
|
-
update["${systemPath}"] = context.object.${systemPath} ${modifier} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
666
|
+
return expandToNode `
|
|
667
|
+
update["${systemPath}"] = context.object.${systemPath} ${modifier} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
181
668
|
`;
|
|
182
669
|
}
|
|
183
|
-
return expandToNode `
|
|
184
|
-
update["${systemPath}"] = ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
670
|
+
return expandToNode `
|
|
671
|
+
update["${systemPath}"] = ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
185
672
|
`;
|
|
186
673
|
}
|
|
187
674
|
function translateVariableAssignment(expression) {
|
|
@@ -192,18 +679,18 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
192
679
|
}
|
|
193
680
|
// ++ or --
|
|
194
681
|
if (isVariableIncrementDecrementAssignment(expression)) {
|
|
195
|
-
return expandToNode `
|
|
196
|
-
${name}${expression.term};
|
|
682
|
+
return expandToNode `
|
|
683
|
+
${name}${expression.term};
|
|
197
684
|
`;
|
|
198
685
|
}
|
|
199
686
|
// +=, -=, *=, /=
|
|
200
687
|
if (isVariableQuickModifyAssignment(expression)) {
|
|
201
|
-
return expandToNode `
|
|
202
|
-
${name} ${expression.term} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
688
|
+
return expandToNode `
|
|
689
|
+
${name} ${expression.term} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
203
690
|
`;
|
|
204
691
|
}
|
|
205
|
-
return expandToNode `
|
|
206
|
-
${name} = ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
692
|
+
return expandToNode `
|
|
693
|
+
${name} = ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
207
694
|
`;
|
|
208
695
|
}
|
|
209
696
|
function translateParentAssignmentExpression(expression) {
|
|
@@ -212,8 +699,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
212
699
|
let systemPath = getSystemPath((_a = expression.property) === null || _a === void 0 ? void 0 : _a.ref, expression.subProperties, (_b = expression.propertyLookup) === null || _b === void 0 ? void 0 : _b.ref, false, true);
|
|
213
700
|
if (isParentIncrementDecrementAssignment(expression)) {
|
|
214
701
|
const modifier = expression.term == "++" ? "+" : "-";
|
|
215
|
-
return expandToNode `
|
|
216
|
-
parentUpdate["${systemPath}"] = context.object.parent.${systemPath} ${modifier} 1;
|
|
702
|
+
return expandToNode `
|
|
703
|
+
parentUpdate["${systemPath}"] = context.object.parent.${systemPath} ${modifier} 1;
|
|
217
704
|
`;
|
|
218
705
|
}
|
|
219
706
|
if (isParentQuickModifyAssignment(expression)) {
|
|
@@ -235,12 +722,12 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
235
722
|
modifier = "+";
|
|
236
723
|
break;
|
|
237
724
|
}
|
|
238
|
-
return expandToNode `
|
|
239
|
-
parentUpdate["${systemPath}"] = context.object.parent.${systemPath} ${modifier} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
725
|
+
return expandToNode `
|
|
726
|
+
parentUpdate["${systemPath}"] = context.object.parent.${systemPath} ${modifier} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
240
727
|
`;
|
|
241
728
|
}
|
|
242
|
-
return expandToNode `
|
|
243
|
-
parentUpdate["${systemPath}"] = ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
729
|
+
return expandToNode `
|
|
730
|
+
parentUpdate["${systemPath}"] = ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
244
731
|
`;
|
|
245
732
|
}
|
|
246
733
|
function translateTargetAssignmentExpression(expression) {
|
|
@@ -248,8 +735,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
248
735
|
let systemPath = getSystemPath((_a = expression.property) === null || _a === void 0 ? void 0 : _a.ref, expression.subProperties, undefined, false, true);
|
|
249
736
|
if (isTargetIncrementDecrementAssignment(expression)) {
|
|
250
737
|
const modifier = expression.term == "++" ? "+" : "-";
|
|
251
|
-
return expandToNode `
|
|
252
|
-
targetUpdate["${systemPath}"] = context.target.${systemPath} ${modifier} 1;
|
|
738
|
+
return expandToNode `
|
|
739
|
+
targetUpdate["${systemPath}"] = context.target.${systemPath} ${modifier} 1;
|
|
253
740
|
`;
|
|
254
741
|
}
|
|
255
742
|
if (isTargetQuickModifyAssignment(expression)) {
|
|
@@ -271,12 +758,12 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
271
758
|
modifier = "+";
|
|
272
759
|
break;
|
|
273
760
|
}
|
|
274
|
-
return expandToNode `
|
|
275
|
-
targetUpdate["${systemPath}"] = context.target.${systemPath} ${modifier} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
761
|
+
return expandToNode `
|
|
762
|
+
targetUpdate["${systemPath}"] = context.target.${systemPath} ${modifier} ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
276
763
|
`;
|
|
277
764
|
}
|
|
278
|
-
return expandToNode `
|
|
279
|
-
targetUpdate["${systemPath}"] = ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
765
|
+
return expandToNode `
|
|
766
|
+
targetUpdate["${systemPath}"] = ${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)};
|
|
280
767
|
`;
|
|
281
768
|
}
|
|
282
769
|
function translateBinaryExpression(expression) {
|
|
@@ -306,26 +793,26 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
306
793
|
console.log("Translating Literal Expression: " + expression.val);
|
|
307
794
|
if (typeof expression.val == "string") {
|
|
308
795
|
if (expression.val == "nothing") {
|
|
309
|
-
return expandToNode `
|
|
310
|
-
null
|
|
796
|
+
return expandToNode `
|
|
797
|
+
null
|
|
311
798
|
`;
|
|
312
799
|
}
|
|
313
800
|
else if (expression.val == "true" || expression.val == "false") {
|
|
314
|
-
return expandToNode `
|
|
315
|
-
${expression.val}
|
|
801
|
+
return expandToNode `
|
|
802
|
+
${expression.val}
|
|
316
803
|
`;
|
|
317
804
|
}
|
|
318
805
|
if (isInitiativeProperty(generatingProperty)) {
|
|
319
|
-
return expandToNode `
|
|
320
|
-
${expression.val}
|
|
806
|
+
return expandToNode `
|
|
807
|
+
${expression.val}
|
|
321
808
|
`;
|
|
322
809
|
}
|
|
323
|
-
return expandToNode `
|
|
324
|
-
"${expression.val}"
|
|
810
|
+
return expandToNode `
|
|
811
|
+
"${expression.val}"
|
|
325
812
|
`;
|
|
326
813
|
}
|
|
327
|
-
return expandToNode `
|
|
328
|
-
${expression.val}
|
|
814
|
+
return expandToNode `
|
|
815
|
+
${expression.val}
|
|
329
816
|
`;
|
|
330
817
|
}
|
|
331
818
|
function translateReferenceExpression(expression) {
|
|
@@ -365,14 +852,14 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
365
852
|
accessPath = `${accessPath}.total`;
|
|
366
853
|
}
|
|
367
854
|
console.log("Access Path: ", accessPath);
|
|
368
|
-
return expandToNode `
|
|
369
|
-
${accessPath}
|
|
855
|
+
return expandToNode `
|
|
856
|
+
${accessPath}
|
|
370
857
|
`;
|
|
371
858
|
}
|
|
372
859
|
function translateGroupedExpression(expression) {
|
|
373
860
|
//console.log("Translating Grouped Expression: " + expression.ge);
|
|
374
|
-
return expandToNode `
|
|
375
|
-
(${translateExpression(entry, id, expression.ge, preDerived, generatingProperty)})
|
|
861
|
+
return expandToNode `
|
|
862
|
+
(${translateExpression(entry, id, expression.ge, preDerived, generatingProperty)})
|
|
376
863
|
`;
|
|
377
864
|
}
|
|
378
865
|
function translateNegatedExpression(expression) {
|
|
@@ -380,12 +867,12 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
380
867
|
var _a;
|
|
381
868
|
// If this is a boolean, we need to negate it differently
|
|
382
869
|
if (isAccess(expression.ne) && isBooleanExp((_a = expression.ne.property) === null || _a === void 0 ? void 0 : _a.ref)) {
|
|
383
|
-
return expandToNode `
|
|
384
|
-
!${translateExpression(entry, id, expression.ne, preDerived, generatingProperty)}
|
|
870
|
+
return expandToNode `
|
|
871
|
+
!${translateExpression(entry, id, expression.ne, preDerived, generatingProperty)}
|
|
385
872
|
`;
|
|
386
873
|
}
|
|
387
|
-
return expandToNode `
|
|
388
|
-
-(${translateExpression(entry, id, expression.ne, preDerived, generatingProperty)})
|
|
874
|
+
return expandToNode `
|
|
875
|
+
-(${translateExpression(entry, id, expression.ne, preDerived, generatingProperty)})
|
|
389
876
|
`;
|
|
390
877
|
}
|
|
391
878
|
function translateAccessExpression(expression, generatingProperty = undefined) {
|
|
@@ -404,8 +891,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
404
891
|
break;
|
|
405
892
|
}
|
|
406
893
|
console.log("Access Name: ", accessName);
|
|
407
|
-
return expandToNode `
|
|
408
|
-
context.object.${accessName}
|
|
894
|
+
return expandToNode `
|
|
895
|
+
context.object.${accessName}
|
|
409
896
|
`;
|
|
410
897
|
}
|
|
411
898
|
if (((_a = expression.property) === null || _a === void 0 ? void 0 : _a.ref) == undefined) {
|
|
@@ -416,20 +903,20 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
416
903
|
if (generatingProperty && ((_c = expression.property) === null || _c === void 0 ? void 0 : _c.ref) == generatingProperty) {
|
|
417
904
|
console.log("Generating self referencing Property Access: ", (_d = expression.property.ref) === null || _d === void 0 ? void 0 : _d.name);
|
|
418
905
|
if (isInitiativeProperty(generatingProperty)) {
|
|
419
|
-
return expandToNode `
|
|
420
|
-
@system.${(_e = expression.property.ref) === null || _e === void 0 ? void 0 : _e.name.toLowerCase()}
|
|
906
|
+
return expandToNode `
|
|
907
|
+
@system.${(_e = expression.property.ref) === null || _e === void 0 ? void 0 : _e.name.toLowerCase()}
|
|
421
908
|
`;
|
|
422
909
|
}
|
|
423
910
|
// Special case: For attribute self-references, use .value instead of .mod to avoid recursion
|
|
424
911
|
if (isAttributeExp(generatingProperty)) {
|
|
425
912
|
const systemPath = `system.${(_f = expression.property.ref) === null || _f === void 0 ? void 0 : _f.name.toLowerCase()}.value`;
|
|
426
|
-
return expandToNode `
|
|
427
|
-
${systemPath}
|
|
913
|
+
return expandToNode `
|
|
914
|
+
${systemPath}
|
|
428
915
|
`;
|
|
429
916
|
}
|
|
430
917
|
const systemPath = getSystemPath((_g = expression.property) === null || _g === void 0 ? void 0 : _g.ref, expression.subProperties, generatingProperty);
|
|
431
|
-
return expandToNode `
|
|
432
|
-
${systemPath}
|
|
918
|
+
return expandToNode `
|
|
919
|
+
${systemPath}
|
|
433
920
|
`;
|
|
434
921
|
}
|
|
435
922
|
// Parent/Self property references store a *path* to another property (e.g. a chosen parent
|
|
@@ -452,13 +939,13 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
452
939
|
}
|
|
453
940
|
if (isParentPropertyRefExp((_l = expression.property) === null || _l === void 0 ? void 0 : _l.ref)) {
|
|
454
941
|
// Parent refs store a full path (e.g. "system.fight") resolved against the parent.
|
|
455
|
-
return expandToNode `
|
|
456
|
-
foundry.utils.getProperty(context.object.parent, context.object.system.${refName}.toLowerCase())${accessor}
|
|
942
|
+
return expandToNode `
|
|
943
|
+
foundry.utils.getProperty(context.object.parent, context.object.system.${refName}.toLowerCase())${accessor}
|
|
457
944
|
`;
|
|
458
945
|
}
|
|
459
946
|
// Self refs store a property name resolved against this document under system.
|
|
460
|
-
return expandToNode `
|
|
461
|
-
foundry.utils.getProperty(context.object, "system." + context.object.system.${refName}.toLowerCase())${accessor}
|
|
947
|
+
return expandToNode `
|
|
948
|
+
foundry.utils.getProperty(context.object, "system." + context.object.system.${refName}.toLowerCase())${accessor}
|
|
462
949
|
`;
|
|
463
950
|
}
|
|
464
951
|
let systemPath = getSystemPath((_m = expression.property) === null || _m === void 0 ? void 0 : _m.ref, expression.subProperties, expression);
|
|
@@ -468,24 +955,24 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
468
955
|
}
|
|
469
956
|
console.log("System Path: ", systemPath);
|
|
470
957
|
if (isInitiativeProperty(generatingProperty)) {
|
|
471
|
-
return expandToNode `
|
|
472
|
-
@${systemPath}
|
|
958
|
+
return expandToNode `
|
|
959
|
+
@${systemPath}
|
|
473
960
|
`;
|
|
474
961
|
}
|
|
475
962
|
if (isAction(generatingProperty)) {
|
|
476
|
-
return expandToNode `
|
|
477
|
-
context.object.${systemPath}
|
|
963
|
+
return expandToNode `
|
|
964
|
+
context.object.${systemPath}
|
|
478
965
|
`;
|
|
479
966
|
}
|
|
480
967
|
// If accessing a property on a document choice, wrap with ?? 0 to handle missing documents
|
|
481
968
|
const needsNullCoalescing = isDocumentChoiceExp((_o = expression.property) === null || _o === void 0 ? void 0 : _o.ref) && expression.subProperties && expression.subProperties.length > 0;
|
|
482
969
|
if (needsNullCoalescing) {
|
|
483
|
-
return expandToNode `
|
|
484
|
-
(${systemPath} ?? 0)
|
|
970
|
+
return expandToNode `
|
|
971
|
+
(${systemPath} ?? 0)
|
|
485
972
|
`;
|
|
486
973
|
}
|
|
487
|
-
return expandToNode `
|
|
488
|
-
${systemPath}
|
|
974
|
+
return expandToNode `
|
|
975
|
+
${systemPath}
|
|
489
976
|
`;
|
|
490
977
|
}
|
|
491
978
|
// function translateResourceAccessExpression(expression: ResourceAccess): CompositeGeneratorNode | undefined {
|
|
@@ -504,35 +991,35 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
504
991
|
//console.log("Translating If Statement: ");
|
|
505
992
|
var _a;
|
|
506
993
|
function translateElseIfStatement(elif) {
|
|
507
|
-
return expandToNode `
|
|
508
|
-
else if (${translateExpression(entry, id, elif.expression, preDerived, generatingProperty)}) {
|
|
509
|
-
${translateBodyExpressionToJavascript(entry, id, elif.method.body, preDerived, generatingProperty)}
|
|
510
|
-
}
|
|
994
|
+
return expandToNode `
|
|
995
|
+
else if (${translateExpression(entry, id, elif.expression, preDerived, generatingProperty)}) {
|
|
996
|
+
${translateBodyExpressionToJavascript(entry, id, elif.method.body, preDerived, generatingProperty)}
|
|
997
|
+
}
|
|
511
998
|
`;
|
|
512
999
|
}
|
|
513
|
-
return expandToNode `
|
|
514
|
-
if (${translateExpression(entry, id, expression.expression, preDerived, generatingProperty)}) {
|
|
515
|
-
${translateBodyExpressionToJavascript(entry, id, expression.method.body, preDerived, generatingProperty)}
|
|
516
|
-
}
|
|
517
|
-
${joinToNode(expression.elseIfs, translateElseIfStatement, { appendNewLineIfNotEmpty: true })}
|
|
518
|
-
${expression.elseMethod != undefined ? expandToNode `
|
|
519
|
-
else {
|
|
520
|
-
${translateBodyExpressionToJavascript(entry, id, (_a = expression.elseMethod) === null || _a === void 0 ? void 0 : _a.body, preDerived, generatingProperty)}
|
|
521
|
-
}
|
|
522
|
-
`.appendNewLineIfNotEmpty() : ""}
|
|
1000
|
+
return expandToNode `
|
|
1001
|
+
if (${translateExpression(entry, id, expression.expression, preDerived, generatingProperty)}) {
|
|
1002
|
+
${translateBodyExpressionToJavascript(entry, id, expression.method.body, preDerived, generatingProperty)}
|
|
1003
|
+
}
|
|
1004
|
+
${joinToNode(expression.elseIfs, translateElseIfStatement, { appendNewLineIfNotEmpty: true })}
|
|
1005
|
+
${expression.elseMethod != undefined ? expandToNode `
|
|
1006
|
+
else {
|
|
1007
|
+
${translateBodyExpressionToJavascript(entry, id, (_a = expression.elseMethod) === null || _a === void 0 ? void 0 : _a.body, preDerived, generatingProperty)}
|
|
1008
|
+
}
|
|
1009
|
+
`.appendNewLineIfNotEmpty() : ""}
|
|
523
1010
|
`;
|
|
524
1011
|
}
|
|
525
1012
|
function translateComparisonExpression(expression) {
|
|
526
1013
|
var _a, _b, _c, _d, _e, _f;
|
|
527
1014
|
console.log("Translating Comparison Expression: ");
|
|
528
1015
|
if (isParentTypeCheckExpression(expression)) {
|
|
529
|
-
return expandToNode `
|
|
530
|
-
context.object.parent && context.object.parent.type == "${(_b = (_a = expression.document.ref) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()}"
|
|
1016
|
+
return expandToNode `
|
|
1017
|
+
context.object.parent && context.object.parent.type == "${(_b = (_a = expression.document.ref) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()}"
|
|
531
1018
|
`;
|
|
532
1019
|
}
|
|
533
1020
|
if (isTargetTypeCheckExpression(expression)) {
|
|
534
|
-
return expandToNode `
|
|
535
|
-
context.target && context.target.type == "${(_d = (_c = expression.document.ref) === null || _c === void 0 ? void 0 : _c.name) === null || _d === void 0 ? void 0 : _d.toLowerCase()}"
|
|
1021
|
+
return expandToNode `
|
|
1022
|
+
context.target && context.target.type == "${(_d = (_c = expression.document.ref) === null || _c === void 0 ? void 0 : _c.name) === null || _d === void 0 ? void 0 : _d.toLowerCase()}"
|
|
536
1023
|
`;
|
|
537
1024
|
}
|
|
538
1025
|
// If the term is "equals" or "==", we need to translate it to "===" in JavaScript
|
|
@@ -543,70 +1030,70 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
543
1030
|
if (isShorthandComparisonExpression(expression)) {
|
|
544
1031
|
console.log("Shorthand Comparison Expression: ", term);
|
|
545
1032
|
if (term == "exists") {
|
|
546
|
-
return expandToNode `
|
|
547
|
-
${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)} != undefined
|
|
1033
|
+
return expandToNode `
|
|
1034
|
+
${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)} != undefined
|
|
548
1035
|
`;
|
|
549
1036
|
}
|
|
550
1037
|
else if (term == "!exists") {
|
|
551
|
-
return expandToNode `
|
|
552
|
-
${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)} == undefined
|
|
1038
|
+
return expandToNode `
|
|
1039
|
+
${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)} == undefined
|
|
553
1040
|
`;
|
|
554
1041
|
}
|
|
555
1042
|
else if (term == "isEmpty") {
|
|
556
|
-
return expandToNode `
|
|
557
|
-
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.length === 0
|
|
1043
|
+
return expandToNode `
|
|
1044
|
+
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.length === 0
|
|
558
1045
|
`;
|
|
559
1046
|
}
|
|
560
1047
|
else if (term == "isNotEmpty") {
|
|
561
|
-
return expandToNode `
|
|
562
|
-
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.length > 0
|
|
1048
|
+
return expandToNode `
|
|
1049
|
+
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.length > 0
|
|
563
1050
|
`;
|
|
564
1051
|
}
|
|
565
|
-
return expandToNode `
|
|
566
|
-
${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)} ${term}
|
|
1052
|
+
return expandToNode `
|
|
1053
|
+
${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)} ${term}
|
|
567
1054
|
`;
|
|
568
1055
|
}
|
|
569
1056
|
console.log("Comparison Expression: ", expression.e1.$type, term, expression.e2.$type);
|
|
570
1057
|
if (term == "has") {
|
|
571
|
-
return expandToNode `
|
|
572
|
-
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.includes(${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)})
|
|
1058
|
+
return expandToNode `
|
|
1059
|
+
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.includes(${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)})
|
|
573
1060
|
`;
|
|
574
1061
|
}
|
|
575
1062
|
if (term == "excludes") {
|
|
576
|
-
return expandToNode `
|
|
577
|
-
!(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.includes(${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)})
|
|
1063
|
+
return expandToNode `
|
|
1064
|
+
!(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.includes(${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)})
|
|
578
1065
|
`;
|
|
579
1066
|
}
|
|
580
1067
|
if (term == "startsWith") {
|
|
581
|
-
return expandToNode `
|
|
582
|
-
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.startsWith(${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)})
|
|
1068
|
+
return expandToNode `
|
|
1069
|
+
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.startsWith(${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)})
|
|
583
1070
|
`;
|
|
584
1071
|
}
|
|
585
1072
|
if (term == "endsWith") {
|
|
586
|
-
return expandToNode `
|
|
587
|
-
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.endsWith(${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)})
|
|
1073
|
+
return expandToNode `
|
|
1074
|
+
(${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)})?.endsWith(${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)})
|
|
588
1075
|
`;
|
|
589
1076
|
}
|
|
590
|
-
return expandToNode `
|
|
591
|
-
${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)} ${term} ${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)}
|
|
1077
|
+
return expandToNode `
|
|
1078
|
+
${translateExpression(entry, id, expression.e1, preDerived, generatingProperty)} ${term} ${translateExpression(entry, id, expression.e2, preDerived, generatingProperty)}
|
|
592
1079
|
`;
|
|
593
1080
|
}
|
|
594
1081
|
if (expression == undefined) {
|
|
595
1082
|
return;
|
|
596
1083
|
}
|
|
597
1084
|
if (typeof expression == "string" && expression == "nothing") {
|
|
598
|
-
return expandToNode `
|
|
599
|
-
null
|
|
1085
|
+
return expandToNode `
|
|
1086
|
+
null
|
|
600
1087
|
`;
|
|
601
1088
|
}
|
|
602
1089
|
if (typeof expression == "string") {
|
|
603
|
-
return expandToNode `
|
|
604
|
-
"${expression}"
|
|
1090
|
+
return expandToNode `
|
|
1091
|
+
"${expression}"
|
|
605
1092
|
`;
|
|
606
1093
|
}
|
|
607
1094
|
if (typeof expression == "number") {
|
|
608
|
-
return expandToNode `
|
|
609
|
-
${expression}
|
|
1095
|
+
return expandToNode `
|
|
1096
|
+
${expression}
|
|
610
1097
|
`;
|
|
611
1098
|
}
|
|
612
1099
|
if (isMethodBlock(expression)) {
|
|
@@ -657,8 +1144,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
657
1144
|
let systemPath = getSystemPath((_a = expression.property) === null || _a === void 0 ? void 0 : _a.ref, expression.subProperties, expression, true);
|
|
658
1145
|
path = `${path}?.${systemPath}`;
|
|
659
1146
|
console.log("Translating Parent Access Expression: ", path);
|
|
660
|
-
return expandToNode `
|
|
661
|
-
${path} ?? 0
|
|
1147
|
+
return expandToNode `
|
|
1148
|
+
${path} ?? 0
|
|
662
1149
|
`;
|
|
663
1150
|
}
|
|
664
1151
|
if (isTargetAccess(expression)) {
|
|
@@ -666,8 +1153,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
666
1153
|
let systemPath = getSystemPath((_b = expression.property) === null || _b === void 0 ? void 0 : _b.ref, expression.subProperties, undefined, true);
|
|
667
1154
|
path = `${path}?.${systemPath}`;
|
|
668
1155
|
console.log("Translating Target Access Expression: ", path);
|
|
669
|
-
return expandToNode `
|
|
670
|
-
${path}
|
|
1156
|
+
return expandToNode `
|
|
1157
|
+
${path}
|
|
671
1158
|
`;
|
|
672
1159
|
}
|
|
673
1160
|
if (isItemAccess(expression)) {
|
|
@@ -689,8 +1176,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
689
1176
|
}
|
|
690
1177
|
}
|
|
691
1178
|
}
|
|
692
|
-
return expandToNode `
|
|
693
|
-
${path}
|
|
1179
|
+
return expandToNode `
|
|
1180
|
+
${path}
|
|
694
1181
|
`;
|
|
695
1182
|
}
|
|
696
1183
|
if (isIfStatement(expression)) {
|
|
@@ -702,7 +1189,7 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
702
1189
|
if (isFleetingAccess(expression)) {
|
|
703
1190
|
let accessPath = (_h = expression.variable.ref) === null || _h === void 0 ? void 0 : _h.name;
|
|
704
1191
|
if (expression.subProperty != undefined) {
|
|
705
|
-
accessPath = `${accessPath}.${expression
|
|
1192
|
+
accessPath = `${accessPath}.${fleetingSubProperty(expression)}`;
|
|
706
1193
|
}
|
|
707
1194
|
else if (expression.arrayAccess != undefined) {
|
|
708
1195
|
accessPath = `${accessPath}[${translateExpression(entry, id, expression.arrayAccess, preDerived, generatingProperty)}]`;
|
|
@@ -715,19 +1202,19 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
715
1202
|
// for dice display, so this does not affect "chat { roll1 }".
|
|
716
1203
|
accessPath = `${accessPath}.total`;
|
|
717
1204
|
}
|
|
718
|
-
return expandToNode `
|
|
719
|
-
${accessPath}
|
|
1205
|
+
return expandToNode `
|
|
1206
|
+
${accessPath}
|
|
720
1207
|
`;
|
|
721
1208
|
}
|
|
722
1209
|
if (isParameter(expression)) {
|
|
723
|
-
return expandToNode `
|
|
724
|
-
${expression.name}
|
|
1210
|
+
return expandToNode `
|
|
1211
|
+
${expression.name}
|
|
725
1212
|
`;
|
|
726
1213
|
}
|
|
727
1214
|
if (isJS(expression)) {
|
|
728
1215
|
// Remove the last "}" from the JS expression
|
|
729
|
-
return expandToNode `
|
|
730
|
-
${expression.js.replace("@js{", "").slice(0, -1)}
|
|
1216
|
+
return expandToNode `
|
|
1217
|
+
${expression.js.replace("@js{", "").slice(0, -1)}
|
|
731
1218
|
`;
|
|
732
1219
|
}
|
|
733
1220
|
if (isChatCard(expression)) {
|
|
@@ -744,43 +1231,43 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
744
1231
|
case "Effects":
|
|
745
1232
|
return undefined; // Renders in a different way
|
|
746
1233
|
case "DocumentType":
|
|
747
|
-
return expandToNode `
|
|
748
|
-
{ isRoll: false, label: "Type", value: context.object.type, wide: ${wide}, hasValue: context.object.type != "" },
|
|
1234
|
+
return expandToNode `
|
|
1235
|
+
{ isRoll: false, label: "Type", value: context.object.type, wide: ${wide}, hasValue: context.object.type != "" },
|
|
749
1236
|
`;
|
|
750
1237
|
case "EditMode":
|
|
751
|
-
return expandToNode `
|
|
752
|
-
{ isRoll: false, label: "Edit Mode", value: context.object.getFlag('${id}', 'editMode') ?? true, wide: ${wide}, hasValue: context.object.getFlag('${id}', 'editMode') != undefined },
|
|
1238
|
+
return expandToNode `
|
|
1239
|
+
{ isRoll: false, label: "Edit Mode", value: context.object.getFlag('${id}', 'editMode') ?? true, wide: ${wide}, hasValue: context.object.getFlag('${id}', 'editMode') != undefined },
|
|
753
1240
|
`;
|
|
754
1241
|
// Properties on the document
|
|
755
1242
|
default:
|
|
756
|
-
return expandToNode `
|
|
757
|
-
{ isRoll: false, label: "${expression.access.toString()}", value: context.object.${expression.access.toString().toLowerCase()}, wide: ${wide}, hasValue: context.object.${expression.access.toString().toLowerCase()} != "" },
|
|
1243
|
+
return expandToNode `
|
|
1244
|
+
{ isRoll: false, label: "${expression.access.toString()}", value: context.object.${expression.access.toString().toLowerCase()}, wide: ${wide}, hasValue: context.object.${expression.access.toString().toLowerCase()} != "" },
|
|
758
1245
|
`;
|
|
759
1246
|
}
|
|
760
1247
|
}
|
|
761
1248
|
if (isMeasuredTemplateField((_d = expression.property) === null || _d === void 0 ? void 0 : _d.ref)) {
|
|
762
|
-
return expandToNode `
|
|
763
|
-
{ isRoll: false, isMeasuredTemplate: true, label: "${humanize((_g = (_f = (_e = expression.property) === null || _e === void 0 ? void 0 : _e.ref) === null || _f === void 0 ? void 0 : _f.name) !== null && _g !== void 0 ? _g : "")}", value: context.object.${systemPath}?.summary, wide: true, hasValue: context.object.${systemPath} != undefined, object: context.object.${systemPath} },
|
|
1249
|
+
return expandToNode `
|
|
1250
|
+
{ isRoll: false, isMeasuredTemplate: true, label: "${humanize((_g = (_f = (_e = expression.property) === null || _e === void 0 ? void 0 : _e.ref) === null || _f === void 0 ? void 0 : _f.name) !== null && _g !== void 0 ? _g : "")}", value: context.object.${systemPath}?.summary, wide: true, hasValue: context.object.${systemPath} != undefined, object: context.object.${systemPath} },
|
|
764
1251
|
`;
|
|
765
1252
|
}
|
|
766
1253
|
if (isParentPropertyRefExp((_h = expression.property) === null || _h === void 0 ? void 0 : _h.ref)) {
|
|
767
|
-
return expandToNode `
|
|
768
|
-
{ isRoll: false, label: "${humanize((_l = (_k = (_j = expression.property) === null || _j === void 0 ? void 0 : _j.ref) === null || _k === void 0 ? void 0 : _k.name) !== null && _l !== void 0 ? _l : "")}", value: context.object.${systemPath}.replace("system", "").replaceAll(".", "").titleCase(), wide: ${wide}, hasValue: context.object.${systemPath} != "" },
|
|
1254
|
+
return expandToNode `
|
|
1255
|
+
{ isRoll: false, label: "${humanize((_l = (_k = (_j = expression.property) === null || _j === void 0 ? void 0 : _j.ref) === null || _k === void 0 ? void 0 : _k.name) !== null && _l !== void 0 ? _l : "")}", value: context.object.${systemPath}.replace("system", "").replaceAll(".", "").titleCase(), wide: ${wide}, hasValue: context.object.${systemPath} != "" },
|
|
769
1256
|
`;
|
|
770
1257
|
}
|
|
771
1258
|
if (isSelfPropertyRefExp((_m = expression.property) === null || _m === void 0 ? void 0 : _m.ref)) {
|
|
772
|
-
return expandToNode `
|
|
773
|
-
{ isRoll: false, label: "${humanize((_q = (_p = (_o = expression.property) === null || _o === void 0 ? void 0 : _o.ref) === null || _p === void 0 ? void 0 : _p.name) !== null && _q !== void 0 ? _q : "")}", value: foundry.utils.getProperty(context.object, context.object.${systemPath}).replace("system", "").replaceAll(".", "").titleCase(), wide: ${wide}, hasValue: context.object.${systemPath} != "" },
|
|
1259
|
+
return expandToNode `
|
|
1260
|
+
{ isRoll: false, label: "${humanize((_q = (_p = (_o = expression.property) === null || _o === void 0 ? void 0 : _o.ref) === null || _p === void 0 ? void 0 : _p.name) !== null && _q !== void 0 ? _q : "")}", value: foundry.utils.getProperty(context.object, context.object.${systemPath}).replace("system", "").replaceAll(".", "").titleCase(), wide: ${wide}, hasValue: context.object.${systemPath} != "" },
|
|
774
1261
|
`;
|
|
775
1262
|
}
|
|
776
|
-
return expandToNode `
|
|
777
|
-
{ isRoll: false, label: "${humanize((_t = (_s = (_r = expression.property) === null || _r === void 0 ? void 0 : _r.ref) === null || _s === void 0 ? void 0 : _s.name) !== null && _t !== void 0 ? _t : "")}", value: context.object.${systemPath}, wide: ${wide}, hasValue: context.object.${systemPath} != "" },
|
|
1263
|
+
return expandToNode `
|
|
1264
|
+
{ isRoll: false, label: "${humanize((_t = (_s = (_r = expression.property) === null || _r === void 0 ? void 0 : _r.ref) === null || _s === void 0 ? void 0 : _s.name) !== null && _t !== void 0 ? _t : "")}", value: context.object.${systemPath}, wide: ${wide}, hasValue: context.object.${systemPath} != "" },
|
|
778
1265
|
`;
|
|
779
1266
|
}
|
|
780
1267
|
if (isFleetingAccess(expression)) {
|
|
781
1268
|
let accessPath = (_u = expression.variable.ref) === null || _u === void 0 ? void 0 : _u.name;
|
|
782
1269
|
if (expression.subProperty != undefined) {
|
|
783
|
-
accessPath = `${accessPath}.${expression
|
|
1270
|
+
accessPath = `${accessPath}.${fleetingSubProperty(expression)}`;
|
|
784
1271
|
}
|
|
785
1272
|
let roll = false;
|
|
786
1273
|
let wide = expression.type == "wide" ? true : false;
|
|
@@ -789,49 +1276,49 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
789
1276
|
if (isDamageRoll((_v = expression.variable.ref) === null || _v === void 0 ? void 0 : _v.value)) {
|
|
790
1277
|
roll = true;
|
|
791
1278
|
wide = true;
|
|
792
|
-
return expandToNode `
|
|
793
|
-
{
|
|
794
|
-
isRoll: ${roll},
|
|
795
|
-
isDamageRoll: true,
|
|
796
|
-
label: "${humanize((_x = (_w = expression.variable.ref) === null || _w === void 0 ? void 0 : _w.name) !== null && _x !== void 0 ? _x : "")}",
|
|
797
|
-
value: ${accessPath},
|
|
798
|
-
wide: ${wide},
|
|
799
|
-
tooltip: await ${accessPath}.getTooltip(),
|
|
800
|
-
damageType: ${accessPath}.options.type.value,
|
|
801
|
-
damageIcon: ${accessPath}.options.type.icon,
|
|
802
|
-
damageColor: ${accessPath}.options.type.color,
|
|
803
|
-
damageMetadata: ${accessPath}.options.type
|
|
804
|
-
},
|
|
1279
|
+
return expandToNode `
|
|
1280
|
+
{
|
|
1281
|
+
isRoll: ${roll},
|
|
1282
|
+
isDamageRoll: true,
|
|
1283
|
+
label: "${humanize((_x = (_w = expression.variable.ref) === null || _w === void 0 ? void 0 : _w.name) !== null && _x !== void 0 ? _x : "")}",
|
|
1284
|
+
value: ${accessPath},
|
|
1285
|
+
wide: ${wide},
|
|
1286
|
+
tooltip: await ${accessPath}.getTooltip(),
|
|
1287
|
+
damageType: ${accessPath}.options.type.value,
|
|
1288
|
+
damageIcon: ${accessPath}.options.type.icon,
|
|
1289
|
+
damageColor: ${accessPath}.options.type.color,
|
|
1290
|
+
damageMetadata: ${accessPath}.options.type
|
|
1291
|
+
},
|
|
805
1292
|
`;
|
|
806
1293
|
}
|
|
807
1294
|
if (isRoll((_y = expression.variable.ref) === null || _y === void 0 ? void 0 : _y.value)) {
|
|
808
1295
|
roll = true;
|
|
809
1296
|
wide = true;
|
|
810
|
-
return expandToNode `
|
|
811
|
-
{ isRoll: ${roll}, label: "${humanize((_0 = (_z = expression.variable.ref) === null || _z === void 0 ? void 0 : _z.name) !== null && _0 !== void 0 ? _0 : "")}", value: ${accessPath}, wide: ${wide}, tooltip: await ${accessPath}.getTooltip() },
|
|
1297
|
+
return expandToNode `
|
|
1298
|
+
{ isRoll: ${roll}, label: "${humanize((_0 = (_z = expression.variable.ref) === null || _z === void 0 ? void 0 : _z.name) !== null && _0 !== void 0 ? _0 : "")}", value: ${accessPath}, wide: ${wide}, tooltip: await ${accessPath}.getTooltip() },
|
|
812
1299
|
`;
|
|
813
1300
|
}
|
|
814
|
-
return expandToNode `
|
|
815
|
-
{ isRoll: ${roll}, label: "${humanize((_2 = (_1 = expression.variable.ref) === null || _1 === void 0 ? void 0 : _1.name) !== null && _2 !== void 0 ? _2 : "")}", value: ${accessPath}, wide: ${wide}, hasValue: ${accessPath} != "" },
|
|
1301
|
+
return expandToNode `
|
|
1302
|
+
{ isRoll: ${roll}, label: "${humanize((_2 = (_1 = expression.variable.ref) === null || _1 === void 0 ? void 0 : _1.name) !== null && _2 !== void 0 ? _2 : "")}", value: ${accessPath}, wide: ${wide}, hasValue: ${accessPath} != "" },
|
|
816
1303
|
`;
|
|
817
1304
|
}
|
|
818
1305
|
if (isParentAccess(expression)) {
|
|
819
1306
|
let systemPath = getSystemPath((_3 = expression.property) === null || _3 === void 0 ? void 0 : _3.ref, expression.subProperties, undefined, true);
|
|
820
1307
|
const wide = expression.type == "wide" ? true : false;
|
|
821
|
-
return expandToNode `
|
|
822
|
-
{ isRoll: false, label: "${humanize((_6 = (_5 = (_4 = expression.property) === null || _4 === void 0 ? void 0 : _4.ref) === null || _5 === void 0 ? void 0 : _5.name) !== null && _6 !== void 0 ? _6 : "")}", value: context.object.parent?.${systemPath}, wide: ${wide}, hasValue: context.object.parent?.${systemPath} != "" },
|
|
1308
|
+
return expandToNode `
|
|
1309
|
+
{ isRoll: false, label: "${humanize((_6 = (_5 = (_4 = expression.property) === null || _4 === void 0 ? void 0 : _4.ref) === null || _5 === void 0 ? void 0 : _5.name) !== null && _6 !== void 0 ? _6 : "")}", value: context.object.parent?.${systemPath}, wide: ${wide}, hasValue: context.object.parent?.${systemPath} != "" },
|
|
823
1310
|
`;
|
|
824
1311
|
}
|
|
825
1312
|
if (isTargetAccess(expression)) {
|
|
826
1313
|
let systemPath = getSystemPath((_7 = expression.property) === null || _7 === void 0 ? void 0 : _7.ref, expression.subProperties, undefined, true);
|
|
827
1314
|
const wide = expression.type == "wide" ? true : false;
|
|
828
|
-
return expandToNode `
|
|
829
|
-
{ isRoll: false, label: "${humanize((_10 = (_9 = (_8 = expression.property) === null || _8 === void 0 ? void 0 : _8.ref) === null || _9 === void 0 ? void 0 : _9.name) !== null && _10 !== void 0 ? _10 : "")}", value: context.target?.${systemPath}, wide: ${wide}, hasValue: context.target?.${systemPath} != "" },
|
|
1315
|
+
return expandToNode `
|
|
1316
|
+
{ isRoll: false, label: "${humanize((_10 = (_9 = (_8 = expression.property) === null || _8 === void 0 ? void 0 : _8.ref) === null || _9 === void 0 ? void 0 : _9.name) !== null && _10 !== void 0 ? _10 : "")}", value: context.target?.${systemPath}, wide: ${wide}, hasValue: context.target?.${systemPath} != "" },
|
|
830
1317
|
`;
|
|
831
1318
|
}
|
|
832
1319
|
if (isExpression(expression)) {
|
|
833
|
-
return expandToNode `
|
|
834
|
-
{ isParagraph: true, value: ${translateExpression(entry, id, expression, preDerived, generatingProperty)} },
|
|
1320
|
+
return expandToNode `
|
|
1321
|
+
{ isParagraph: true, value: ${translateExpression(entry, id, expression, preDerived, generatingProperty)} },
|
|
835
1322
|
`;
|
|
836
1323
|
}
|
|
837
1324
|
return;
|
|
@@ -840,475 +1327,60 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
840
1327
|
var _a, _b, _c;
|
|
841
1328
|
if (isAccess(expression)) {
|
|
842
1329
|
let systemPath = getSystemPath((_a = expression.property) === null || _a === void 0 ? void 0 : _a.ref, expression.subProperties, (_b = expression.propertyLookup) === null || _b === void 0 ? void 0 : _b.ref);
|
|
843
|
-
return expandToNode `
|
|
844
|
-
context.object.${systemPath}
|
|
1330
|
+
return expandToNode `
|
|
1331
|
+
context.object.${systemPath}
|
|
845
1332
|
`;
|
|
846
1333
|
}
|
|
847
1334
|
if (isFleetingAccess(expression)) {
|
|
848
1335
|
let accessPath = (_c = expression.variable.ref) === null || _c === void 0 ? void 0 : _c.name;
|
|
849
1336
|
if (expression.subProperty != undefined) {
|
|
850
|
-
accessPath = `${accessPath}.${expression
|
|
1337
|
+
accessPath = `${accessPath}.${fleetingSubProperty(expression)}`;
|
|
851
1338
|
}
|
|
852
|
-
return expandToNode `
|
|
853
|
-
${accessPath}
|
|
1339
|
+
return expandToNode `
|
|
1340
|
+
${accessPath}
|
|
854
1341
|
`;
|
|
855
1342
|
}
|
|
856
1343
|
if (isExpression(expression)) {
|
|
857
|
-
return expandToNode `
|
|
858
|
-
${translateExpression(entry, id, expression, preDerived, generatingProperty)}
|
|
1344
|
+
return expandToNode `
|
|
1345
|
+
${translateExpression(entry, id, expression, preDerived, generatingProperty)}
|
|
859
1346
|
`;
|
|
860
1347
|
}
|
|
861
1348
|
return;
|
|
862
1349
|
}
|
|
863
1350
|
const flavorTag = expression.body.chatExp.find(x => x.type == "flavor");
|
|
864
1351
|
const shouldShowEffects = expression.body.chatExp.some(x => isAccess(x) && x.access === "Effects");
|
|
865
|
-
return expandToNode `
|
|
866
|
-
// Create the chat message
|
|
867
|
-
const ${expression.name}Description = context.object.description ?? context.object.system.description;
|
|
868
|
-
const ${expression.name}Context = {
|
|
869
|
-
cssClass: "${id} ${toMachineIdentifier(expression.name)}",
|
|
870
|
-
document: context.object,
|
|
871
|
-
description: ${expression.name}Description,
|
|
872
|
-
hasDescription: ${expression.name}Description!= "",
|
|
873
|
-
hasEffects: ${shouldShowEffects},
|
|
874
|
-
parts: [
|
|
875
|
-
${joinToNode(expression.body.chatExp.filter(x => x.type != "tag"), (expression) => translateChatBodyExpression(expression), { appendNewLineIfNotEmpty: true })}
|
|
876
|
-
],
|
|
877
|
-
tags: [
|
|
878
|
-
${joinToNode(expression.body.chatExp.filter(x => x.type == "tag"), (expression) => translateChatBodyExpression(expression), { appendNewLineIfNotEmpty: true })}
|
|
879
|
-
]
|
|
880
|
-
};
|
|
881
|
-
const ${expression.name}Content = await renderTemplate("systems/${id}/system/templates/chat/standard-card.hbs", ${expression.name}Context);
|
|
882
|
-
const ${expression.name}ChatFlavor = (system) => {
|
|
883
|
-
return ${flavorTag != undefined ? translateChatBodyExpressionForFlavor(flavorTag) : `""`}
|
|
884
|
-
}
|
|
885
|
-
await ChatMessage.create({
|
|
886
|
-
user: game.user._id,
|
|
887
|
-
speaker: ChatMessage.getSpeaker(),
|
|
888
|
-
content: ${expression.name}Content,
|
|
889
|
-
flavor: ${expression.name}ChatFlavor(context.object.system),
|
|
890
|
-
...(${expression.name}Context.parts.find(x => x.isRoll) ? {} : { style: CONST.CHAT_MESSAGE_STYLES.IC }),
|
|
891
|
-
rolls: Array.from(${expression.name}Context.parts.filter(x => x.isRoll).map(x => x.value)),
|
|
892
|
-
});
|
|
1352
|
+
return expandToNode `
|
|
1353
|
+
// Create the chat message
|
|
1354
|
+
const ${expression.name}Description = context.object.description ?? context.object.system.description;
|
|
1355
|
+
const ${expression.name}Context = {
|
|
1356
|
+
cssClass: "${id} ${toMachineIdentifier(expression.name)}",
|
|
1357
|
+
document: context.object,
|
|
1358
|
+
description: ${expression.name}Description,
|
|
1359
|
+
hasDescription: ${expression.name}Description!= "",
|
|
1360
|
+
hasEffects: ${shouldShowEffects},
|
|
1361
|
+
parts: [
|
|
1362
|
+
${joinToNode(expression.body.chatExp.filter(x => x.type != "tag"), (expression) => translateChatBodyExpression(expression), { appendNewLineIfNotEmpty: true })}
|
|
1363
|
+
],
|
|
1364
|
+
tags: [
|
|
1365
|
+
${joinToNode(expression.body.chatExp.filter(x => x.type == "tag"), (expression) => translateChatBodyExpression(expression), { appendNewLineIfNotEmpty: true })}
|
|
1366
|
+
]
|
|
1367
|
+
};
|
|
1368
|
+
const ${expression.name}Content = await renderTemplate("systems/${id}/system/templates/chat/standard-card.hbs", ${expression.name}Context);
|
|
1369
|
+
const ${expression.name}ChatFlavor = (system) => {
|
|
1370
|
+
return ${flavorTag != undefined ? translateChatBodyExpressionForFlavor(flavorTag) : `""`}
|
|
1371
|
+
}
|
|
1372
|
+
await ChatMessage.create({
|
|
1373
|
+
user: game.user._id,
|
|
1374
|
+
speaker: ChatMessage.getSpeaker(),
|
|
1375
|
+
content: ${expression.name}Content,
|
|
1376
|
+
flavor: ${expression.name}ChatFlavor(context.object.system),
|
|
1377
|
+
...(${expression.name}Context.parts.find(x => x.isRoll) ? {} : { style: CONST.CHAT_MESSAGE_STYLES.IC }),
|
|
1378
|
+
rolls: Array.from(${expression.name}Context.parts.filter(x => x.isRoll).map(x => x.value)),
|
|
1379
|
+
});
|
|
893
1380
|
`;
|
|
894
1381
|
}
|
|
895
1382
|
if (isRoll(expression) || isDamageRoll(expression)) {
|
|
896
1383
|
console.log("Translating Roll Expression");
|
|
897
|
-
function translateDiceParts(expression, noLabels = false) {
|
|
898
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32;
|
|
899
|
-
console.log("Translating Dice Part: ", expression.$type);
|
|
900
|
-
if (isLiteral(expression)) {
|
|
901
|
-
if (typeof expression.val == "string") {
|
|
902
|
-
return expandToNode `
|
|
903
|
-
"${expression.val}"
|
|
904
|
-
`;
|
|
905
|
-
}
|
|
906
|
-
return expandToNode `
|
|
907
|
-
"${expression.val}"
|
|
908
|
-
`;
|
|
909
|
-
}
|
|
910
|
-
if (isRef(expression)) {
|
|
911
|
-
// If string or number, return the value
|
|
912
|
-
if (typeof expression.val == "string" || typeof expression.val == "number") {
|
|
913
|
-
return expandToNode `
|
|
914
|
-
"${expression.val}"
|
|
915
|
-
`;
|
|
916
|
-
}
|
|
917
|
-
if (expression.val.ref == undefined) {
|
|
918
|
-
return;
|
|
919
|
-
}
|
|
920
|
-
if (expression.subProperties != undefined && expression.subProperties.length > 0) {
|
|
921
|
-
const subLabel = noLabels ? "" : `[${humanize(expression.subProperties[0])}]`;
|
|
922
|
-
return expandToNode `
|
|
923
|
-
"@${(_a = expression.val.ref) === null || _a === void 0 ? void 0 : _a.name}${expression.subProperties[0].toLowerCase()}${subLabel}"
|
|
924
|
-
`;
|
|
925
|
-
}
|
|
926
|
-
console.log("Ref:", `${expression.val.$refText}`);
|
|
927
|
-
if (IntelligentSystemDesignLanguageTerminals.DICE.test(`${expression.val}`)) {
|
|
928
|
-
return expandToNode `
|
|
929
|
-
"${expression.val}"
|
|
930
|
-
`;
|
|
931
|
-
}
|
|
932
|
-
const refLabel = noLabels ? "" : `[${humanize((_c = (_b = expression.val.ref) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : expression.val.$refText)}]`;
|
|
933
|
-
return expandToNode `
|
|
934
|
-
"@${(_f = (_e = (_d = expression.val.ref) === null || _d === void 0 ? void 0 : _d.name) === null || _e === void 0 ? void 0 : _e.toLowerCase()) !== null && _f !== void 0 ? _f : expression.val.$refText}${refLabel}"
|
|
935
|
-
`;
|
|
936
|
-
}
|
|
937
|
-
if (isParentAccess(expression)) {
|
|
938
|
-
let path = (_j = (_h = (_g = expression.property) === null || _g === void 0 ? void 0 : _g.ref) === null || _h === void 0 ? void 0 : _h.name) !== null && _j !== void 0 ? _j : "";
|
|
939
|
-
let label = humanize((_m = (_l = (_k = expression.property) === null || _k === void 0 ? void 0 : _k.ref) === null || _l === void 0 ? void 0 : _l.name) !== null && _m !== void 0 ? _m : "");
|
|
940
|
-
const document = getParentDocument(expression);
|
|
941
|
-
if (document != undefined) {
|
|
942
|
-
path = `${document.name.toLowerCase()}${path}`;
|
|
943
|
-
label = `${humanize(document.name)} ${label}`;
|
|
944
|
-
}
|
|
945
|
-
// else if ( expression.propertyLookup != undefined ) {
|
|
946
|
-
// path = `${path}${expression.propertyLookup.ref?.name.toLowerCase()}`;
|
|
947
|
-
// label = `${label} \${context.object.system.${expression.propertyLookup.ref?.name.toLowerCase()}\}`;
|
|
948
|
-
// }
|
|
949
|
-
else {
|
|
950
|
-
path = `${path}${(_p = (_o = expression.property) === null || _o === void 0 ? void 0 : _o.ref) === null || _p === void 0 ? void 0 : _p.name.toLowerCase()}`;
|
|
951
|
-
label = `${label} ${humanize((_s = (_r = (_q = expression.property) === null || _q === void 0 ? void 0 : _q.ref) === null || _r === void 0 ? void 0 : _r.name) !== null && _s !== void 0 ? _s : "")}`;
|
|
952
|
-
}
|
|
953
|
-
for (const subProperty of (_t = expression.subProperties) !== null && _t !== void 0 ? _t : []) {
|
|
954
|
-
path = `${path}${subProperty}`;
|
|
955
|
-
label = `${label} ${humanize(subProperty)}`;
|
|
956
|
-
}
|
|
957
|
-
label = label.trim();
|
|
958
|
-
const parentLabelSuffix = noLabels ? "" : `[${label}]`;
|
|
959
|
-
return expandToNode `
|
|
960
|
-
\`@${path.replaceAll(".", "").toLowerCase()}${parentLabelSuffix}\`
|
|
961
|
-
`;
|
|
962
|
-
}
|
|
963
|
-
if (isTargetAccess(expression)) {
|
|
964
|
-
let path = (_w = (_v = (_u = expression.property) === null || _u === void 0 ? void 0 : _u.ref) === null || _v === void 0 ? void 0 : _v.name) !== null && _w !== void 0 ? _w : "";
|
|
965
|
-
let label = humanize((_z = (_y = (_x = expression.property) === null || _x === void 0 ? void 0 : _x.ref) === null || _y === void 0 ? void 0 : _y.name) !== null && _z !== void 0 ? _z : "");
|
|
966
|
-
const document = getTargetDocument(expression);
|
|
967
|
-
if (document != undefined) {
|
|
968
|
-
path = `${document.name.toLowerCase()}${path}`;
|
|
969
|
-
label = `${humanize(document.name)} ${label}`;
|
|
970
|
-
}
|
|
971
|
-
// else if ( expression.propertyLookup != undefined ) {
|
|
972
|
-
// path = `${path}${expression.propertyLookup.ref?.name.toLowerCase()}`;
|
|
973
|
-
// label = `${label} \${context.object.system.${expression.propertyLookup.ref?.name.toLowerCase()}\}`;
|
|
974
|
-
// }
|
|
975
|
-
else {
|
|
976
|
-
path = `${path}${(_1 = (_0 = expression.property) === null || _0 === void 0 ? void 0 : _0.ref) === null || _1 === void 0 ? void 0 : _1.name.toLowerCase()}`;
|
|
977
|
-
label = `${label} ${humanize((_4 = (_3 = (_2 = expression.property) === null || _2 === void 0 ? void 0 : _2.ref) === null || _3 === void 0 ? void 0 : _3.name) !== null && _4 !== void 0 ? _4 : "")}`;
|
|
978
|
-
}
|
|
979
|
-
for (const subProperty of (_5 = expression.subProperties) !== null && _5 !== void 0 ? _5 : []) {
|
|
980
|
-
path = `${path}${subProperty}`;
|
|
981
|
-
label = `${label} ${humanize(subProperty)}`;
|
|
982
|
-
}
|
|
983
|
-
label = label.trim();
|
|
984
|
-
const targetLabelSuffix = noLabels ? "" : `[${label}]`;
|
|
985
|
-
return expandToNode `
|
|
986
|
-
\`@${path.replaceAll(".", "").toLowerCase()}${targetLabelSuffix}\`
|
|
987
|
-
`;
|
|
988
|
-
}
|
|
989
|
-
if (isAccess(expression)) {
|
|
990
|
-
let path = (_13 = (_9 = (_8 = (_7 = (_6 = expression.property) === null || _6 === void 0 ? void 0 : _6.ref) === null || _7 === void 0 ? void 0 : _7.name) === null || _8 === void 0 ? void 0 : _8.toLowerCase()) !== null && _9 !== void 0 ? _9 : (_12 = (_11 = (_10 = expression.propertyLookup) === null || _10 === void 0 ? void 0 : _10.ref) === null || _11 === void 0 ? void 0 : _11.name) === null || _12 === void 0 ? void 0 : _12.toLowerCase()) !== null && _13 !== void 0 ? _13 : "";
|
|
991
|
-
let label = humanize((_19 = (_16 = (_15 = (_14 = expression.property) === null || _14 === void 0 ? void 0 : _14.ref) === null || _15 === void 0 ? void 0 : _15.name) !== null && _16 !== void 0 ? _16 : (_18 = (_17 = expression.propertyLookup) === null || _17 === void 0 ? void 0 : _17.ref) === null || _18 === void 0 ? void 0 : _18.name) !== null && _19 !== void 0 ? _19 : "");
|
|
992
|
-
// if (isDieField(expression.property?.ref)) {
|
|
993
|
-
// return expandToNode`
|
|
994
|
-
// \'@${path.replaceAll(".", "")}\'
|
|
995
|
-
// `;
|
|
996
|
-
// }
|
|
997
|
-
// Special handling for document choices - expand into individual terms
|
|
998
|
-
if (expression.property && isDocumentChoicesExp(expression.property.ref) && expression.subProperties && expression.subProperties.length > 0) {
|
|
999
|
-
const choicesFieldName = expression.property.ref.name.toLowerCase();
|
|
1000
|
-
const subPropertyName = expression.subProperties[0].toLowerCase();
|
|
1001
|
-
const subPropertyLabel = humanize(expression.subProperties[0]);
|
|
1002
|
-
// Generate dynamic expansion for each document in the choices array
|
|
1003
|
-
return expandToNode `
|
|
1004
|
-
context.object.system.${choicesFieldName}.map((doc, index) => {
|
|
1005
|
-
if (!doc || !doc.system) return '';
|
|
1006
|
-
return '@' + doc.uuid.replace(/[^a-zA-Z0-9]/g, '').toLowerCase() + '${subPropertyName}[' + doc.name + ' ${subPropertyLabel}]';
|
|
1007
|
-
}).filter(Boolean).join(' + ')
|
|
1008
|
-
`;
|
|
1009
|
-
}
|
|
1010
|
-
if (isParentPropertyRefExp((_20 = expression.property) === null || _20 === void 0 ? void 0 : _20.ref)) {
|
|
1011
|
-
label = `${label} - \${context.object.system.${(_22 = (_21 = expression.property) === null || _21 === void 0 ? void 0 : _21.ref) === null || _22 === void 0 ? void 0 : _22.name.toLowerCase()}.replace("system.", "").replaceAll(".", " ").titleCase()\}`;
|
|
1012
|
-
}
|
|
1013
|
-
else if (isSelfPropertyRefExp((_23 = expression.property) === null || _23 === void 0 ? void 0 : _23.ref)) {
|
|
1014
|
-
label = `${label} - \${context.object.system.${(_25 = (_24 = expression.property) === null || _24 === void 0 ? void 0 : _24.ref) === null || _25 === void 0 ? void 0 : _25.name.toLowerCase()}.replace("system.", "").replaceAll(".", " ").titleCase()\}`;
|
|
1015
|
-
}
|
|
1016
|
-
else {
|
|
1017
|
-
for (const subProperty of (_26 = expression.subProperties) !== null && _26 !== void 0 ? _26 : []) {
|
|
1018
|
-
path = `${path}.${subProperty}`;
|
|
1019
|
-
label = `${label} ${humanize(subProperty)}`;
|
|
1020
|
-
}
|
|
1021
|
-
}
|
|
1022
|
-
console.log("Access:", path, label);
|
|
1023
|
-
const accessLabelSuffix = noLabels ? "" : `[${label}]`;
|
|
1024
|
-
return expandToNode `
|
|
1025
|
-
\`@${path.replaceAll(".", "").toLowerCase()}${accessLabelSuffix}\`
|
|
1026
|
-
`;
|
|
1027
|
-
}
|
|
1028
|
-
if (isFleetingAccess(expression)) {
|
|
1029
|
-
// If this is a roll expression, just output it directly
|
|
1030
|
-
if (isRoll((_27 = expression.variable.ref) === null || _27 === void 0 ? void 0 : _27.value)) {
|
|
1031
|
-
return expandToNode `
|
|
1032
|
-
${(_28 = expression.variable.ref) === null || _28 === void 0 ? void 0 : _28.name}
|
|
1033
|
-
`;
|
|
1034
|
-
}
|
|
1035
|
-
let path = (_30 = (_29 = expression.variable.ref) === null || _29 === void 0 ? void 0 : _29.name) !== null && _30 !== void 0 ? _30 : "";
|
|
1036
|
-
let label = humanize((_32 = (_31 = expression.variable.ref) === null || _31 === void 0 ? void 0 : _31.name) !== null && _32 !== void 0 ? _32 : "");
|
|
1037
|
-
if (expression.subProperty != undefined) {
|
|
1038
|
-
path = `${path}.${expression.subProperty}`;
|
|
1039
|
-
label = `${label} ${humanize(expression.subProperty)}`;
|
|
1040
|
-
}
|
|
1041
|
-
const fleetingLabelSuffix = noLabels ? "" : `[${label}]`;
|
|
1042
|
-
return expandToNode `
|
|
1043
|
-
\`@${path.replaceAll(".", "").toLowerCase()}${fleetingLabelSuffix}\`
|
|
1044
|
-
`;
|
|
1045
|
-
}
|
|
1046
|
-
if (isBinaryExpression(expression)) {
|
|
1047
|
-
return expandToNode `
|
|
1048
|
-
${translateDiceParts(expression.e1, noLabels)} + "${expression.op}" + ${translateDiceParts(expression.e2, noLabels)}
|
|
1049
|
-
`;
|
|
1050
|
-
}
|
|
1051
|
-
if (isGroup(expression)) {
|
|
1052
|
-
return expandToNode `
|
|
1053
|
-
"(" + ${translateDiceParts(expression.ge, noLabels)} + ")"
|
|
1054
|
-
`;
|
|
1055
|
-
}
|
|
1056
|
-
return;
|
|
1057
|
-
}
|
|
1058
|
-
function translateDisplayFormula(expression) {
|
|
1059
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
1060
|
-
if (isLiteral(expression)) {
|
|
1061
|
-
return `${expression.val}`;
|
|
1062
|
-
}
|
|
1063
|
-
if (isGroup(expression)) {
|
|
1064
|
-
const inner = translateDisplayFormula(expression.ge);
|
|
1065
|
-
return inner != null ? `(${inner})` : undefined;
|
|
1066
|
-
}
|
|
1067
|
-
if (isBinaryExpression(expression)) {
|
|
1068
|
-
const left = translateDisplayFormula(expression.e1);
|
|
1069
|
-
const right = translateDisplayFormula(expression.e2);
|
|
1070
|
-
return left != null && right != null ? `${left} ${expression.op} ${right}` : undefined;
|
|
1071
|
-
}
|
|
1072
|
-
if (isAccess(expression)) {
|
|
1073
|
-
if (isParentPropertyRefExp((_a = expression.property) === null || _a === void 0 ? void 0 : _a.ref) || isSelfPropertyRefExp((_b = expression.property) === null || _b === void 0 ? void 0 : _b.ref)) {
|
|
1074
|
-
return undefined;
|
|
1075
|
-
}
|
|
1076
|
-
let label = humanize((_h = (_e = (_d = (_c = expression.property) === null || _c === void 0 ? void 0 : _c.ref) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : (_g = (_f = expression.propertyLookup) === null || _f === void 0 ? void 0 : _f.ref) === null || _g === void 0 ? void 0 : _g.name) !== null && _h !== void 0 ? _h : "");
|
|
1077
|
-
for (const sub of (_j = expression.subProperties) !== null && _j !== void 0 ? _j : []) {
|
|
1078
|
-
label += ` ${humanize(sub)}`;
|
|
1079
|
-
}
|
|
1080
|
-
return label.trim();
|
|
1081
|
-
}
|
|
1082
|
-
if (isParentAccess(expression)) {
|
|
1083
|
-
return humanize((_m = (_l = (_k = expression.property) === null || _k === void 0 ? void 0 : _k.ref) === null || _l === void 0 ? void 0 : _l.name) !== null && _m !== void 0 ? _m : "");
|
|
1084
|
-
}
|
|
1085
|
-
if (isTargetAccess(expression)) {
|
|
1086
|
-
return humanize((_q = (_p = (_o = expression.property) === null || _o === void 0 ? void 0 : _o.ref) === null || _p === void 0 ? void 0 : _p.name) !== null && _q !== void 0 ? _q : "");
|
|
1087
|
-
}
|
|
1088
|
-
if (isFleetingAccess(expression)) {
|
|
1089
|
-
return humanize((_s = (_r = expression.variable.ref) === null || _r === void 0 ? void 0 : _r.name) !== null && _s !== void 0 ? _s : "");
|
|
1090
|
-
}
|
|
1091
|
-
return undefined;
|
|
1092
|
-
}
|
|
1093
|
-
function translateDiceData(expression) {
|
|
1094
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52;
|
|
1095
|
-
console.log("Translating Dice Data: ", expression.$type);
|
|
1096
|
-
if (isParentAccess(expression)) {
|
|
1097
|
-
let path = "context.object.parent.system";
|
|
1098
|
-
let label = (_c = (_b = (_a = expression.property) === null || _a === void 0 ? void 0 : _a.ref) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : "";
|
|
1099
|
-
console.log("Parent Access:", (_e = (_d = expression.property) === null || _d === void 0 ? void 0 : _d.ref) === null || _e === void 0 ? void 0 : _e.name);
|
|
1100
|
-
const document = getParentDocument(expression);
|
|
1101
|
-
if (document != undefined) {
|
|
1102
|
-
path = `${path}.${(_h = (_g = (_f = expression.property) === null || _f === void 0 ? void 0 : _f.ref) === null || _g === void 0 ? void 0 : _g.name) === null || _h === void 0 ? void 0 : _h.toLowerCase()}`;
|
|
1103
|
-
label = `${humanize(document.name)}.${label}`;
|
|
1104
|
-
}
|
|
1105
|
-
else {
|
|
1106
|
-
path = `${path}.${(_l = (_k = (_j = expression.property) === null || _j === void 0 ? void 0 : _j.ref) === null || _k === void 0 ? void 0 : _k.name) === null || _l === void 0 ? void 0 : _l.toLowerCase()}`;
|
|
1107
|
-
label = `${label}.${expression.property}`;
|
|
1108
|
-
}
|
|
1109
|
-
for (const subProperty of (_m = expression.subProperties) !== null && _m !== void 0 ? _m : []) {
|
|
1110
|
-
path = `${path}.${subProperty}`;
|
|
1111
|
-
label = `${label}.${subProperty}`;
|
|
1112
|
-
}
|
|
1113
|
-
return expandToNode `
|
|
1114
|
-
"${label.replaceAll(".", "").toLowerCase()}": ${path}
|
|
1115
|
-
`;
|
|
1116
|
-
}
|
|
1117
|
-
if (isTargetAccess(expression)) {
|
|
1118
|
-
let path = "context.target.system";
|
|
1119
|
-
let label = (_q = (_p = (_o = expression.property) === null || _o === void 0 ? void 0 : _o.ref) === null || _p === void 0 ? void 0 : _p.name) !== null && _q !== void 0 ? _q : "";
|
|
1120
|
-
console.log("Target Access:", (_s = (_r = expression.property) === null || _r === void 0 ? void 0 : _r.ref) === null || _s === void 0 ? void 0 : _s.name);
|
|
1121
|
-
const document = getTargetDocument(expression);
|
|
1122
|
-
if (document != undefined) {
|
|
1123
|
-
path = `${path}.${(_v = (_u = (_t = expression.property) === null || _t === void 0 ? void 0 : _t.ref) === null || _u === void 0 ? void 0 : _u.name) === null || _v === void 0 ? void 0 : _v.toLowerCase()}`;
|
|
1124
|
-
label = `${humanize(document.name)}.${label}`;
|
|
1125
|
-
}
|
|
1126
|
-
else {
|
|
1127
|
-
path = `${path}.${(_y = (_x = (_w = expression.property) === null || _w === void 0 ? void 0 : _w.ref) === null || _x === void 0 ? void 0 : _x.name) === null || _y === void 0 ? void 0 : _y.toLowerCase()}`;
|
|
1128
|
-
label = `${label}.${expression.property}`;
|
|
1129
|
-
}
|
|
1130
|
-
for (const subProperty of (_z = expression.subProperties) !== null && _z !== void 0 ? _z : []) {
|
|
1131
|
-
path = `${path}.${subProperty}`;
|
|
1132
|
-
label = `${label}.${subProperty}`;
|
|
1133
|
-
}
|
|
1134
|
-
return expandToNode `
|
|
1135
|
-
"${label.replaceAll(".", "").toLowerCase()}": ${path}
|
|
1136
|
-
`;
|
|
1137
|
-
}
|
|
1138
|
-
if (isAccess(expression)) {
|
|
1139
|
-
let path = "context.object.system";
|
|
1140
|
-
let label = "";
|
|
1141
|
-
console.log("Access:", (_1 = (_0 = expression.property) === null || _0 === void 0 ? void 0 : _0.ref) === null || _1 === void 0 ? void 0 : _1.name, (_3 = (_2 = expression.propertyLookup) === null || _2 === void 0 ? void 0 : _2.ref) === null || _3 === void 0 ? void 0 : _3.name);
|
|
1142
|
-
if (expression.propertyLookup != undefined) {
|
|
1143
|
-
path = `${path}[context.object.${getSystemPath(expression.propertyLookup.ref)}.toLowerCase()]`;
|
|
1144
|
-
label = `${(_4 = expression.propertyLookup.ref) === null || _4 === void 0 ? void 0 : _4.name}`;
|
|
1145
|
-
}
|
|
1146
|
-
else if (isParentPropertyRefExp((_5 = expression.property) === null || _5 === void 0 ? void 0 : _5.ref)) {
|
|
1147
|
-
path = `${path}.${(_7 = (_6 = expression.property) === null || _6 === void 0 ? void 0 : _6.ref) === null || _7 === void 0 ? void 0 : _7.name.toLowerCase()}`;
|
|
1148
|
-
label = `${(_9 = (_8 = expression.property) === null || _8 === void 0 ? void 0 : _8.ref) === null || _9 === void 0 ? void 0 : _9.name}`;
|
|
1149
|
-
let subProperty = "";
|
|
1150
|
-
if (((_10 = expression.property) === null || _10 === void 0 ? void 0 : _10.ref.propertyType) == "resource" || ((_11 = expression.property) === null || _11 === void 0 ? void 0 : _11.ref.propertyType) == "tracker" || ((_12 = expression.property) === null || _12 === void 0 ? void 0 : _12.ref.propertyType) == "choice"
|
|
1151
|
-
&& (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "value")) {
|
|
1152
|
-
subProperty = "?.value";
|
|
1153
|
-
}
|
|
1154
|
-
if (((_13 = expression.property) === null || _13 === void 0 ? void 0 : _13.ref.propertyType) == "attribute" && (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "mod")) {
|
|
1155
|
-
subProperty = "?.mod";
|
|
1156
|
-
}
|
|
1157
|
-
console.log(label, path);
|
|
1158
|
-
return expandToNode `
|
|
1159
|
-
"${label.replaceAll(".", "").replaceAll(" ", "").toLowerCase()}": foundry.utils.getProperty(context.object.parent, ${path}.toLowerCase())${subProperty}
|
|
1160
|
-
`;
|
|
1161
|
-
}
|
|
1162
|
-
else if (isSelfPropertyRefExp((_14 = expression.property) === null || _14 === void 0 ? void 0 : _14.ref)) {
|
|
1163
|
-
// For self property references, we dynamically resolve the property path
|
|
1164
|
-
let selfPropertyPath = `context.object.system.${(_16 = (_15 = expression.property) === null || _15 === void 0 ? void 0 : _15.ref) === null || _16 === void 0 ? void 0 : _16.name.toLowerCase()}`;
|
|
1165
|
-
let subProperty = "";
|
|
1166
|
-
label = `${(_18 = (_17 = expression.property) === null || _17 === void 0 ? void 0 : _17.ref) === null || _18 === void 0 ? void 0 : _18.name}`;
|
|
1167
|
-
if (((_19 = expression.property) === null || _19 === void 0 ? void 0 : _19.ref.propertyType) == "resource" || ((_20 = expression.property) === null || _20 === void 0 ? void 0 : _20.ref.propertyType) == "tracker" || ((_21 = expression.property) === null || _21 === void 0 ? void 0 : _21.ref.propertyType) == "choice"
|
|
1168
|
-
&& (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "value")) {
|
|
1169
|
-
subProperty = "?.value";
|
|
1170
|
-
}
|
|
1171
|
-
if (((_22 = expression.property) === null || _22 === void 0 ? void 0 : _22.ref.propertyType) == "attribute" && (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "mod")) {
|
|
1172
|
-
subProperty = "?.mod";
|
|
1173
|
-
}
|
|
1174
|
-
console.log(label, selfPropertyPath);
|
|
1175
|
-
return expandToNode `
|
|
1176
|
-
"${label.replaceAll(".", "").replaceAll(" ", "").toLowerCase()}": foundry.utils.getProperty(context.object, "system." + ${selfPropertyPath}.toLowerCase())${subProperty}
|
|
1177
|
-
`;
|
|
1178
|
-
}
|
|
1179
|
-
else {
|
|
1180
|
-
// Special handling for document choices - expand into individual data entries
|
|
1181
|
-
if (expression.property && isDocumentChoicesExp(expression.property.ref) && expression.subProperties && expression.subProperties.length > 0) {
|
|
1182
|
-
const choicesFieldName = expression.property.ref.name.toLowerCase();
|
|
1183
|
-
const subPropertyName = expression.subProperties[0].toLowerCase();
|
|
1184
|
-
// Generate data for each document in the choices array
|
|
1185
|
-
return expandToNode `
|
|
1186
|
-
...Object.fromEntries(context.object.system.${choicesFieldName}.map((doc, index) => {
|
|
1187
|
-
if (!doc || !doc.system) return null;
|
|
1188
|
-
|
|
1189
|
-
// Determine the accessor based on property type
|
|
1190
|
-
let accessor = '.${subPropertyName}';
|
|
1191
|
-
${isResourceExp((_23 = expression.property) === null || _23 === void 0 ? void 0 : _23.ref) || isTrackerExp((_24 = expression.property) === null || _24 === void 0 ? void 0 : _24.ref) ? `
|
|
1192
|
-
if (doc.system.${subPropertyName} && typeof doc.system.${subPropertyName} === 'object' && 'value' in doc.system.${subPropertyName}) {
|
|
1193
|
-
accessor = '.${subPropertyName}.value';
|
|
1194
|
-
}` : ''}
|
|
1195
|
-
${isAttributeExp((_25 = expression.property) === null || _25 === void 0 ? void 0 : _25.ref) ? `
|
|
1196
|
-
if (doc.system.${subPropertyName} && typeof doc.system.${subPropertyName} === 'object' && 'mod' in doc.system.${subPropertyName}) {
|
|
1197
|
-
accessor = '.${subPropertyName}.mod';
|
|
1198
|
-
}` : ''}
|
|
1199
|
-
|
|
1200
|
-
const key = doc.uuid.replace(/[^a-zA-Z0-9]/g, '').toLowerCase() + '${subPropertyName}';
|
|
1201
|
-
const value = foundry.utils.getProperty(doc, 'system' + accessor) ?? 0;
|
|
1202
|
-
return [key, value];
|
|
1203
|
-
}).filter(Boolean))
|
|
1204
|
-
`;
|
|
1205
|
-
}
|
|
1206
|
-
path = `${path}.${(_27 = (_26 = expression.property) === null || _26 === void 0 ? void 0 : _26.ref) === null || _27 === void 0 ? void 0 : _27.name.toLowerCase()}`;
|
|
1207
|
-
label = `${(_29 = (_28 = expression.property) === null || _28 === void 0 ? void 0 : _28.ref) === null || _29 === void 0 ? void 0 : _29.name}`;
|
|
1208
|
-
if ((isResourceExp((_30 = expression.property) === null || _30 === void 0 ? void 0 : _30.ref) || isTrackerExp((_31 = expression.property) === null || _31 === void 0 ? void 0 : _31.ref) || isStringChoiceField((_32 = expression.property) === null || _32 === void 0 ? void 0 : _32.ref))
|
|
1209
|
-
&& (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] == "value")) {
|
|
1210
|
-
path = `${path}.value`;
|
|
1211
|
-
}
|
|
1212
|
-
if (isDiceField((_33 = expression.property) === null || _33 === void 0 ? void 0 : _33.ref) && (expression.subProperties == undefined || expression.subProperties.length == 0)) {
|
|
1213
|
-
// For dice fields without subproperties, use the dice value
|
|
1214
|
-
path = `${path}.value`;
|
|
1215
|
-
}
|
|
1216
|
-
if (isDieField((_34 = expression.property) === null || _34 === void 0 ? void 0 : _34.ref)) {
|
|
1217
|
-
// For die fields, the value is just the die size (e.g., "d6"), we want to use the field name as label
|
|
1218
|
-
// Don't change the path, just ensure the label is the field name
|
|
1219
|
-
}
|
|
1220
|
-
if (isAttributeExp((_35 = expression.property) === null || _35 === void 0 ? void 0 : _35.ref) && (expression.subProperties == undefined || expression.subProperties.length == 0 || expression.subProperties[0] !== "mod")) {
|
|
1221
|
-
path = `${path}.mod`;
|
|
1222
|
-
}
|
|
1223
|
-
}
|
|
1224
|
-
for (const subProperty of (_36 = expression.subProperties) !== null && _36 !== void 0 ? _36 : []) {
|
|
1225
|
-
path = `${path}.${subProperty}`;
|
|
1226
|
-
label = `${label} ${humanize(subProperty)}`;
|
|
1227
|
-
}
|
|
1228
|
-
console.log(label, path);
|
|
1229
|
-
return expandToNode `
|
|
1230
|
-
"${label.replaceAll(".", "").replaceAll(" ", "").toLowerCase()}": ${path} ?? 0
|
|
1231
|
-
`;
|
|
1232
|
-
}
|
|
1233
|
-
if (isFleetingAccess(expression)) {
|
|
1234
|
-
console.log("Fleeting Access:", (_37 = expression.variable.ref) === null || _37 === void 0 ? void 0 : _37.name);
|
|
1235
|
-
// If this is a roll expression, just skip it
|
|
1236
|
-
if (isRoll((_38 = expression.variable.ref) === null || _38 === void 0 ? void 0 : _38.value)) {
|
|
1237
|
-
return;
|
|
1238
|
-
}
|
|
1239
|
-
let path = (_39 = expression.variable.ref) === null || _39 === void 0 ? void 0 : _39.name;
|
|
1240
|
-
if (expression.subProperty != undefined) {
|
|
1241
|
-
path = `${path}.${expression.subProperty}`;
|
|
1242
|
-
}
|
|
1243
|
-
if (expression.arrayAccess != undefined) {
|
|
1244
|
-
console.log("Array Access:", expression.arrayAccess.$type);
|
|
1245
|
-
let accessExp = translateExpression(entry, id, expression.arrayAccess, preDerived, generatingProperty);
|
|
1246
|
-
path = `${path}[${(_40 = accessExp === null || accessExp === void 0 ? void 0 : accessExp.contents) === null || _40 === void 0 ? void 0 : _40.toString()}]`;
|
|
1247
|
-
}
|
|
1248
|
-
const label = (_42 = (_41 = expression.variable.ref) === null || _41 === void 0 ? void 0 : _41.name.toLowerCase()) !== null && _42 !== void 0 ? _42 : "";
|
|
1249
|
-
console.log(label, path);
|
|
1250
|
-
return expandToNode `
|
|
1251
|
-
"${label}": ${path} ?? 0
|
|
1252
|
-
`;
|
|
1253
|
-
}
|
|
1254
|
-
// if (isVariableAccess(expression)) {
|
|
1255
|
-
// console.log("Variable Access:", expression.name);
|
|
1256
|
-
// if (isParameter(expression)) {
|
|
1257
|
-
// console.log("Parameter:", expression.name);
|
|
1258
|
-
// return expandToNode`
|
|
1259
|
-
// "${expression.name}": ${expression.name}
|
|
1260
|
-
// `;
|
|
1261
|
-
// }
|
|
1262
|
-
// if (isVariableExpression(expression)) {
|
|
1263
|
-
// console.log("Variable Expression:", expression.name);
|
|
1264
|
-
// if (isExpression(expression.value)) {
|
|
1265
|
-
// console.log("Expression:", expression.name);
|
|
1266
|
-
// return translateDiceData(expression.value);
|
|
1267
|
-
// }
|
|
1268
|
-
// if (isPrompt(expression.value)) {
|
|
1269
|
-
// console.log("Prompt:", expression.name);
|
|
1270
|
-
// return expandToNode`
|
|
1271
|
-
// "${expression.name}": ${expression.name}
|
|
1272
|
-
// `;
|
|
1273
|
-
// }
|
|
1274
|
-
// }
|
|
1275
|
-
// throw new Error("Variable Access not implemented");
|
|
1276
|
-
// }
|
|
1277
|
-
if (isRef(expression)) {
|
|
1278
|
-
console.log("Ref:", (_43 = expression.val.ref) === null || _43 === void 0 ? void 0 : _43.name);
|
|
1279
|
-
// If string or number, return the value
|
|
1280
|
-
if (typeof expression.val == "string" || typeof expression.val == "number") {
|
|
1281
|
-
console.log(expression.val);
|
|
1282
|
-
return expandToNode `
|
|
1283
|
-
"${expression.val}": ${expression.val}
|
|
1284
|
-
`;
|
|
1285
|
-
}
|
|
1286
|
-
if (expression.val.ref == undefined) {
|
|
1287
|
-
return;
|
|
1288
|
-
}
|
|
1289
|
-
if (expression.subProperties != undefined && expression.subProperties.length > 0) {
|
|
1290
|
-
return expandToNode `
|
|
1291
|
-
"${(_44 = expression.val.ref) === null || _44 === void 0 ? void 0 : _44.name.toLowerCase()}${expression.subProperties[0].toLowerCase()}": ${(_45 = expression.val.ref) === null || _45 === void 0 ? void 0 : _45.name}.${expression.subProperties[0].toLowerCase()} ?? 0
|
|
1292
|
-
`;
|
|
1293
|
-
}
|
|
1294
|
-
console.log((_46 = expression.val.ref) === null || _46 === void 0 ? void 0 : _46.name, (_47 = expression.val.ref) === null || _47 === void 0 ? void 0 : _47.$type);
|
|
1295
|
-
return expandToNode `
|
|
1296
|
-
"${(_50 = (_49 = (_48 = expression.val.ref) === null || _48 === void 0 ? void 0 : _48.name) === null || _49 === void 0 ? void 0 : _49.toLowerCase()) !== null && _50 !== void 0 ? _50 : expression.val.$refText}": ${(_52 = (_51 = expression.val.ref) === null || _51 === void 0 ? void 0 : _51.name) !== null && _52 !== void 0 ? _52 : expression.val.$refText} ?? 0
|
|
1297
|
-
`;
|
|
1298
|
-
}
|
|
1299
|
-
if (isBinaryExpression(expression)) {
|
|
1300
|
-
const expressions = [expression.e1, expression.e2];
|
|
1301
|
-
return expandToNode `
|
|
1302
|
-
${joinToNode(expressions, e => translateDiceData(e), { separator: ", " })}
|
|
1303
|
-
`;
|
|
1304
|
-
}
|
|
1305
|
-
if (isGroup(expression)) {
|
|
1306
|
-
return expandToNode `
|
|
1307
|
-
${translateDiceData(expression.ge)}
|
|
1308
|
-
`;
|
|
1309
|
-
}
|
|
1310
|
-
return undefined;
|
|
1311
|
-
}
|
|
1312
1384
|
if (isDamageRoll(expression)) {
|
|
1313
1385
|
const rollParam = expression.params.find(isRollParam);
|
|
1314
1386
|
const rollExpression = rollParam.value;
|
|
@@ -1322,13 +1394,13 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1322
1394
|
const parentPath = (_s = (_r = (_q = (_p = typeParam.value.property) === null || _p === void 0 ? void 0 : _p.ref) === null || _q === void 0 ? void 0 : _q.name) === null || _r === void 0 ? void 0 : _r.toLowerCase()) !== null && _s !== void 0 ? _s : '';
|
|
1323
1395
|
damageTypeDataAccess = `context.object.parent?.system.${parentPath}`;
|
|
1324
1396
|
}
|
|
1325
|
-
return expandToNode `
|
|
1326
|
-
await new ${entry.config.name}DamageRoll(
|
|
1327
|
-
${joinToNode(rollExpression.parts, e => translateDiceParts(e), { separator: " + " })},
|
|
1328
|
-
{${joinToNode(rollExpression.parts, e => translateDiceData(e), { separator: ", " })},
|
|
1329
|
-
actor: context.actor},
|
|
1330
|
-
{ type: ${damageTypeDataAccess} }
|
|
1331
|
-
).roll()
|
|
1397
|
+
return expandToNode `
|
|
1398
|
+
await new ${entry.config.name}DamageRoll(
|
|
1399
|
+
${joinToNode(rollExpression.parts, e => translateDiceParts(e), { separator: " + " })},
|
|
1400
|
+
{${joinToNode(rollExpression.parts, e => translateDiceData(e, entry, id, preDerived, generatingProperty), { separator: ", " })},
|
|
1401
|
+
actor: context.actor},
|
|
1402
|
+
{ type: ${damageTypeDataAccess} }
|
|
1403
|
+
).roll()
|
|
1332
1404
|
`;
|
|
1333
1405
|
}
|
|
1334
1406
|
const rollParts = expression.parts;
|
|
@@ -1336,32 +1408,32 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1336
1408
|
const displayFormula = displayFormulaParts.every(p => p != null)
|
|
1337
1409
|
? displayFormulaParts.join("")
|
|
1338
1410
|
: undefined;
|
|
1339
|
-
return expandToNode `
|
|
1411
|
+
return expandToNode `
|
|
1340
1412
|
Object.assign(await new ${entry.config.name}Roll(${joinToNode(rollParts, (e, idx) => {
|
|
1341
1413
|
const nextPart = rollParts[idx + 1];
|
|
1342
1414
|
const nextIsDice = nextPart != null && isLiteral(nextPart) && typeof nextPart.val === 'string' && IntelligentSystemDesignLanguageTerminals.DICE.test(nextPart.val);
|
|
1343
1415
|
return translateDiceParts(e, nextIsDice);
|
|
1344
|
-
}, { separator: " + " })}, {${joinToNode(rollParts, e => translateDiceData(e), { separator: ", " })}}).roll(), ${displayFormula != null ? `{_displayFormula: "${displayFormula}"}` : '{}'})
|
|
1416
|
+
}, { separator: " + " })}, {${joinToNode(rollParts, e => translateDiceData(e, entry, id, preDerived, generatingProperty), { separator: ", " })}}).roll(), ${displayFormula != null ? `{_displayFormula: "${displayFormula}"}` : '{}'})
|
|
1345
1417
|
`;
|
|
1346
1418
|
}
|
|
1347
1419
|
if (isSelfMethod(expression)) {
|
|
1348
1420
|
switch (expression.method) {
|
|
1349
1421
|
case "delete()": {
|
|
1350
|
-
return expandToNode `
|
|
1351
|
-
await document.delete();
|
|
1352
|
-
selfDeleted = true;
|
|
1422
|
+
return expandToNode `
|
|
1423
|
+
await document.delete();
|
|
1424
|
+
selfDeleted = true;
|
|
1353
1425
|
`;
|
|
1354
1426
|
}
|
|
1355
1427
|
case "update()": {
|
|
1356
|
-
return expandToNode `
|
|
1357
|
-
if (selfDeleted) {
|
|
1358
|
-
ui.notifications.error("Cannot update a deleted document");
|
|
1359
|
-
}
|
|
1360
|
-
else if (Object.keys(update).length > 0) {
|
|
1361
|
-
await document.update(update);
|
|
1362
|
-
context.object.system = document.system;
|
|
1363
|
-
}
|
|
1364
|
-
update = {};
|
|
1428
|
+
return expandToNode `
|
|
1429
|
+
if (selfDeleted) {
|
|
1430
|
+
ui.notifications.error("Cannot update a deleted document");
|
|
1431
|
+
}
|
|
1432
|
+
else if (Object.keys(update).length > 0) {
|
|
1433
|
+
await document.update(update);
|
|
1434
|
+
context.object.system = document.system;
|
|
1435
|
+
}
|
|
1436
|
+
update = {};
|
|
1365
1437
|
`.appendNewLine();
|
|
1366
1438
|
}
|
|
1367
1439
|
default: {
|
|
@@ -1370,8 +1442,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1370
1442
|
}
|
|
1371
1443
|
}
|
|
1372
1444
|
if (isArrayExpression(expression)) {
|
|
1373
|
-
return expandToNode `
|
|
1374
|
-
[${joinToNode(expression.items, e => translateExpression(entry, id, e, preDerived, generatingProperty), { separator: ", " })}]
|
|
1445
|
+
return expandToNode `
|
|
1446
|
+
[${joinToNode(expression.items, e => translateExpression(entry, id, e, preDerived, generatingProperty), { separator: ", " })}]
|
|
1375
1447
|
`;
|
|
1376
1448
|
}
|
|
1377
1449
|
if (isEach(expression)) {
|
|
@@ -1379,10 +1451,10 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1379
1451
|
const eachExpression = expression;
|
|
1380
1452
|
const collection = translateExpression(entry, id, expression.collection, preDerived, generatingProperty);
|
|
1381
1453
|
if (isNumberRange(expression.collection)) {
|
|
1382
|
-
return expandToNode `
|
|
1383
|
-
for (const ${translateExpression(entry, id, expression.var, preDerived, generatingProperty)} of ${collection} ?? []) {
|
|
1384
|
-
${translateBodyExpressionToJavascript(entry, id, expression.method.body, preDerived, generatingProperty)}
|
|
1385
|
-
}
|
|
1454
|
+
return expandToNode `
|
|
1455
|
+
for (const ${translateExpression(entry, id, expression.var, preDerived, generatingProperty)} of ${collection} ?? []) {
|
|
1456
|
+
${translateBodyExpressionToJavascript(entry, id, expression.method.body, preDerived, generatingProperty)}
|
|
1457
|
+
}
|
|
1386
1458
|
`;
|
|
1387
1459
|
}
|
|
1388
1460
|
let updateExpression;
|
|
@@ -1391,26 +1463,26 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1391
1463
|
return isVariableAssignment(x) && x.variable.ref == eachExpression.var;
|
|
1392
1464
|
})) {
|
|
1393
1465
|
if (isParentAccess(expression.collection)) {
|
|
1394
|
-
updateExpression = expandToNode `
|
|
1395
|
-
parentEmbeddedUpdate["${getSystemPath((_t = expression.collection.property) === null || _t === void 0 ? void 0 : _t.ref, [], undefined, false)}"] = ${collection};
|
|
1466
|
+
updateExpression = expandToNode `
|
|
1467
|
+
parentEmbeddedUpdate["${getSystemPath((_t = expression.collection.property) === null || _t === void 0 ? void 0 : _t.ref, [], undefined, false)}"] = ${collection};
|
|
1396
1468
|
`;
|
|
1397
1469
|
}
|
|
1398
1470
|
else if (isTargetAccess(expression.collection)) {
|
|
1399
|
-
updateExpression = expandToNode `
|
|
1400
|
-
targetEmbeddedUpdate["${getSystemPath((_u = expression.collection.property) === null || _u === void 0 ? void 0 : _u.ref, [], undefined, false)}"] = ${collection};
|
|
1471
|
+
updateExpression = expandToNode `
|
|
1472
|
+
targetEmbeddedUpdate["${getSystemPath((_u = expression.collection.property) === null || _u === void 0 ? void 0 : _u.ref, [], undefined, false)}"] = ${collection};
|
|
1401
1473
|
`;
|
|
1402
1474
|
}
|
|
1403
1475
|
else {
|
|
1404
|
-
updateExpression = expandToNode `
|
|
1405
|
-
embeddedUpdate["${collection}"] = ${collection};
|
|
1476
|
+
updateExpression = expandToNode `
|
|
1477
|
+
embeddedUpdate["${collection}"] = ${collection};
|
|
1406
1478
|
`;
|
|
1407
1479
|
}
|
|
1408
1480
|
}
|
|
1409
|
-
return expandToNode `
|
|
1410
|
-
for (const ${translateExpression(entry, id, expression.var, preDerived, generatingProperty)} of ${collection} ?? []) {
|
|
1411
|
-
${translateBodyExpressionToJavascript(entry, id, expression.method.body, preDerived, generatingProperty)}
|
|
1412
|
-
}
|
|
1413
|
-
${updateExpression}
|
|
1481
|
+
return expandToNode `
|
|
1482
|
+
for (const ${translateExpression(entry, id, expression.var, preDerived, generatingProperty)} of ${collection} ?? []) {
|
|
1483
|
+
${translateBodyExpressionToJavascript(entry, id, expression.method.body, preDerived, generatingProperty)}
|
|
1484
|
+
}
|
|
1485
|
+
${updateExpression}
|
|
1414
1486
|
`;
|
|
1415
1487
|
}
|
|
1416
1488
|
if (isPrompt(expression)) {
|
|
@@ -1442,185 +1514,185 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1442
1514
|
else if (units === "minutes") {
|
|
1443
1515
|
durationMod = ` * 60 * 1000`;
|
|
1444
1516
|
}
|
|
1445
|
-
durationExpression = expandToNode `
|
|
1446
|
-
${duration}${durationMod}
|
|
1517
|
+
durationExpression = expandToNode `
|
|
1518
|
+
${duration}${durationMod}
|
|
1447
1519
|
`;
|
|
1448
1520
|
}
|
|
1449
1521
|
if (target == "gm") {
|
|
1450
|
-
return expandToNode `
|
|
1451
|
-
await new Promise((resolve, reject) => {
|
|
1452
|
-
|
|
1453
|
-
const firstGm = game.users.find(u => u.isGM && u.active);
|
|
1454
|
-
const uuid = foundry.utils.randomID();
|
|
1455
|
-
|
|
1456
|
-
// Setup a listener that will wait for this response
|
|
1457
|
-
game.socket.on("system.${id}", (data) => {
|
|
1458
|
-
if (data.type != "promptResponse" || data.uuid != uuid) return;
|
|
1459
|
-
|
|
1460
|
-
// Resolve the promise with the data
|
|
1461
|
-
resolve(data.data);
|
|
1462
|
-
});
|
|
1463
|
-
|
|
1464
|
-
game.socket.emit("system.${id}", {
|
|
1465
|
-
uuid: uuid,
|
|
1466
|
-
type: "prompt",
|
|
1467
|
-
userId: game.user.id,
|
|
1468
|
-
${widthParam ? `width: ${widthParam.value},` : ""}
|
|
1469
|
-
${heightParam ? `height: ${heightParam.value},` : ""}
|
|
1470
|
-
${locationParam ? expandToNode `left: ${translateExpression(entry, id, locationParam.x, false, generatingProperty)},
|
|
1471
|
-
top: ${translateExpression(entry, id, locationParam.y, false, generatingProperty)},` : ""}
|
|
1472
|
-
${timeLimitParam ? expandToNode `timeLimit: ${durationExpression},` : ""}
|
|
1473
|
-
title: "${title}",
|
|
1474
|
-
promptKey: "${promptKey}",
|
|
1475
|
-
documentUuid: context.object.uuid,
|
|
1476
|
-
}, {recipients: [firstGm.id]});
|
|
1477
|
-
});
|
|
1522
|
+
return expandToNode `
|
|
1523
|
+
await new Promise((resolve, reject) => {
|
|
1524
|
+
|
|
1525
|
+
const firstGm = game.users.find(u => u.isGM && u.active);
|
|
1526
|
+
const uuid = foundry.utils.randomID();
|
|
1527
|
+
|
|
1528
|
+
// Setup a listener that will wait for this response
|
|
1529
|
+
game.socket.on("system.${id}", (data) => {
|
|
1530
|
+
if (data.type != "promptResponse" || data.uuid != uuid) return;
|
|
1531
|
+
|
|
1532
|
+
// Resolve the promise with the data
|
|
1533
|
+
resolve(data.data);
|
|
1534
|
+
});
|
|
1535
|
+
|
|
1536
|
+
game.socket.emit("system.${id}", {
|
|
1537
|
+
uuid: uuid,
|
|
1538
|
+
type: "prompt",
|
|
1539
|
+
userId: game.user.id,
|
|
1540
|
+
${widthParam ? `width: ${widthParam.value},` : ""}
|
|
1541
|
+
${heightParam ? `height: ${heightParam.value},` : ""}
|
|
1542
|
+
${locationParam ? expandToNode `left: ${translateExpression(entry, id, locationParam.x, false, generatingProperty)},
|
|
1543
|
+
top: ${translateExpression(entry, id, locationParam.y, false, generatingProperty)},` : ""}
|
|
1544
|
+
${timeLimitParam ? expandToNode `timeLimit: ${durationExpression},` : ""}
|
|
1545
|
+
title: "${title}",
|
|
1546
|
+
promptKey: "${promptKey}",
|
|
1547
|
+
documentUuid: context.object.uuid,
|
|
1548
|
+
}, {recipients: [firstGm.id]});
|
|
1549
|
+
});
|
|
1478
1550
|
`;
|
|
1479
1551
|
}
|
|
1480
1552
|
if (target == "target") {
|
|
1481
|
-
return expandToNode `
|
|
1482
|
-
await new Promise((resolve, reject) => {
|
|
1483
|
-
// Try to find a non-GM owner
|
|
1484
|
-
let owner = game.users.find(u => u.active && !u.isGM && u.id != game.user.id && context.target.testUserPermission(u, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER));
|
|
1485
|
-
|
|
1486
|
-
// If no owner is found, use the first active user
|
|
1487
|
-
if (!owner) {
|
|
1488
|
-
owner = game.users.find(u => u.active && u.id != game.user.id && context.target.testUserPermission(u, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER));
|
|
1489
|
-
}
|
|
1490
|
-
|
|
1491
|
-
// If still no owner is found, default to the current user
|
|
1492
|
-
if (!owner) {
|
|
1493
|
-
owner = game.user.id;
|
|
1494
|
-
}
|
|
1495
|
-
let ownerId = owner.id;
|
|
1496
|
-
const uuid = foundry.utils.randomID();
|
|
1497
|
-
|
|
1498
|
-
// Setup a listener that will wait for this response
|
|
1499
|
-
game.socket.on("system.${id}", (data) => {
|
|
1500
|
-
if (data.type != "promptResponse" || data.uuid != uuid) return;
|
|
1501
|
-
|
|
1502
|
-
// Resolve the promise with the data
|
|
1503
|
-
resolve(data.data);
|
|
1504
|
-
});
|
|
1505
|
-
|
|
1506
|
-
game.socket.emit("system.${id}", {
|
|
1507
|
-
uuid: uuid,
|
|
1508
|
-
type: "prompt",
|
|
1509
|
-
userId: game.user.id,
|
|
1510
|
-
${widthParam ? `width: ${widthParam.value},` : ""}
|
|
1511
|
-
${heightParam ? `height: ${heightParam.value},` : ""}
|
|
1512
|
-
${locationParam ? expandToNode `left: ${translateExpression(entry, id, locationParam.x, false, generatingProperty)},
|
|
1513
|
-
top: ${translateExpression(entry, id, locationParam.y, false, generatingProperty)},` : ""}
|
|
1514
|
-
${timeLimitParam ? expandToNode `timeLimit: ${durationExpression},` : ""}
|
|
1515
|
-
title: "${title}",
|
|
1516
|
-
promptKey: "${promptKey}",
|
|
1517
|
-
documentUuid: context.object.uuid,
|
|
1518
|
-
}, {recipients: [ownerId]});
|
|
1519
|
-
});
|
|
1553
|
+
return expandToNode `
|
|
1554
|
+
await new Promise((resolve, reject) => {
|
|
1555
|
+
// Try to find a non-GM owner
|
|
1556
|
+
let owner = game.users.find(u => u.active && !u.isGM && u.id != game.user.id && context.target.testUserPermission(u, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER));
|
|
1557
|
+
|
|
1558
|
+
// If no owner is found, use the first active user
|
|
1559
|
+
if (!owner) {
|
|
1560
|
+
owner = game.users.find(u => u.active && u.id != game.user.id && context.target.testUserPermission(u, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER));
|
|
1561
|
+
}
|
|
1562
|
+
|
|
1563
|
+
// If still no owner is found, default to the current user
|
|
1564
|
+
if (!owner) {
|
|
1565
|
+
owner = game.user.id;
|
|
1566
|
+
}
|
|
1567
|
+
let ownerId = owner.id;
|
|
1568
|
+
const uuid = foundry.utils.randomID();
|
|
1569
|
+
|
|
1570
|
+
// Setup a listener that will wait for this response
|
|
1571
|
+
game.socket.on("system.${id}", (data) => {
|
|
1572
|
+
if (data.type != "promptResponse" || data.uuid != uuid) return;
|
|
1573
|
+
|
|
1574
|
+
// Resolve the promise with the data
|
|
1575
|
+
resolve(data.data);
|
|
1576
|
+
});
|
|
1577
|
+
|
|
1578
|
+
game.socket.emit("system.${id}", {
|
|
1579
|
+
uuid: uuid,
|
|
1580
|
+
type: "prompt",
|
|
1581
|
+
userId: game.user.id,
|
|
1582
|
+
${widthParam ? `width: ${widthParam.value},` : ""}
|
|
1583
|
+
${heightParam ? `height: ${heightParam.value},` : ""}
|
|
1584
|
+
${locationParam ? expandToNode `left: ${translateExpression(entry, id, locationParam.x, false, generatingProperty)},
|
|
1585
|
+
top: ${translateExpression(entry, id, locationParam.y, false, generatingProperty)},` : ""}
|
|
1586
|
+
${timeLimitParam ? expandToNode `timeLimit: ${durationExpression},` : ""}
|
|
1587
|
+
title: "${title}",
|
|
1588
|
+
promptKey: "${promptKey}",
|
|
1589
|
+
documentUuid: context.object.uuid,
|
|
1590
|
+
}, {recipients: [ownerId]});
|
|
1591
|
+
});
|
|
1520
1592
|
`;
|
|
1521
1593
|
}
|
|
1522
1594
|
if (target == "user") {
|
|
1523
|
-
return expandToNode `
|
|
1524
|
-
await new Promise(async (resolve, reject) => {
|
|
1525
|
-
|
|
1526
|
-
const allActiveUsers = game.users.filter(u => u.active && u.id != game.user.id);
|
|
1527
|
-
const targetedUser = await Dialog.prompt({
|
|
1528
|
-
title: "Select User",
|
|
1529
|
-
content: \`<form>
|
|
1530
|
-
<div class="form-group">
|
|
1531
|
-
<label>\${game.i18n.localize("User")}</label>
|
|
1532
|
-
<select name="user">
|
|
1533
|
-
\${allActiveUsers.map(u => \`<option value="\${u.id}">\${u.name}</option>\`).join("")}
|
|
1534
|
-
</select>
|
|
1535
|
-
</div>
|
|
1536
|
-
</form>\`,
|
|
1537
|
-
callback: (html, event) => {
|
|
1538
|
-
const formData = new FormDataExtended(html[0].querySelector("form"));
|
|
1539
|
-
return formData.get("user");
|
|
1540
|
-
},
|
|
1541
|
-
options: {
|
|
1542
|
-
classes: ["${id}", "dialog"],
|
|
1543
|
-
}
|
|
1544
|
-
});
|
|
1545
|
-
const uuid = foundry.utils.randomID();
|
|
1546
|
-
|
|
1547
|
-
// Setup a listener that will wait for this response
|
|
1548
|
-
game.socket.on("system.${id}", (data) => {
|
|
1549
|
-
if (data.type != "promptResponse" || data.uuid != uuid) return;
|
|
1550
|
-
|
|
1551
|
-
// Resolve the promise with the data
|
|
1552
|
-
resolve(data.data);
|
|
1553
|
-
});
|
|
1554
|
-
|
|
1555
|
-
game.socket.emit("system.${id}", {
|
|
1556
|
-
uuid: uuid,
|
|
1557
|
-
type: "prompt",
|
|
1558
|
-
userId: game.user.id,
|
|
1559
|
-
title: "${title}",
|
|
1560
|
-
promptKey: "${promptKey}",
|
|
1561
|
-
documentUuid: context.object.uuid,
|
|
1562
|
-
${widthParam ? expandToNode `width: ${widthParam.value},` : ""}
|
|
1563
|
-
${heightParam ? expandToNode `height: ${heightParam.value},` : ""}
|
|
1564
|
-
${locationParam ? expandToNode `left: ${translateExpression(entry, id, locationParam.x, false, generatingProperty)},
|
|
1565
|
-
top: ${translateExpression(entry, id, locationParam.y, false, generatingProperty)},` : ""}
|
|
1566
|
-
${timeLimitParam ? expandToNode `timeLimit: ${durationExpression},` : ""}
|
|
1567
|
-
}, {recipients: [targetedUser]});
|
|
1568
|
-
});
|
|
1595
|
+
return expandToNode `
|
|
1596
|
+
await new Promise(async (resolve, reject) => {
|
|
1597
|
+
|
|
1598
|
+
const allActiveUsers = game.users.filter(u => u.active && u.id != game.user.id);
|
|
1599
|
+
const targetedUser = await Dialog.prompt({
|
|
1600
|
+
title: "Select User",
|
|
1601
|
+
content: \`<form>
|
|
1602
|
+
<div class="form-group">
|
|
1603
|
+
<label>\${game.i18n.localize("User")}</label>
|
|
1604
|
+
<select name="user">
|
|
1605
|
+
\${allActiveUsers.map(u => \`<option value="\${u.id}">\${u.name}</option>\`).join("")}
|
|
1606
|
+
</select>
|
|
1607
|
+
</div>
|
|
1608
|
+
</form>\`,
|
|
1609
|
+
callback: (html, event) => {
|
|
1610
|
+
const formData = new FormDataExtended(html[0].querySelector("form"));
|
|
1611
|
+
return formData.get("user");
|
|
1612
|
+
},
|
|
1613
|
+
options: {
|
|
1614
|
+
classes: ["${id}", "dialog"],
|
|
1615
|
+
}
|
|
1616
|
+
});
|
|
1617
|
+
const uuid = foundry.utils.randomID();
|
|
1618
|
+
|
|
1619
|
+
// Setup a listener that will wait for this response
|
|
1620
|
+
game.socket.on("system.${id}", (data) => {
|
|
1621
|
+
if (data.type != "promptResponse" || data.uuid != uuid) return;
|
|
1622
|
+
|
|
1623
|
+
// Resolve the promise with the data
|
|
1624
|
+
resolve(data.data);
|
|
1625
|
+
});
|
|
1626
|
+
|
|
1627
|
+
game.socket.emit("system.${id}", {
|
|
1628
|
+
uuid: uuid,
|
|
1629
|
+
type: "prompt",
|
|
1630
|
+
userId: game.user.id,
|
|
1631
|
+
title: "${title}",
|
|
1632
|
+
promptKey: "${promptKey}",
|
|
1633
|
+
documentUuid: context.object.uuid,
|
|
1634
|
+
${widthParam ? expandToNode `width: ${widthParam.value},` : ""}
|
|
1635
|
+
${heightParam ? expandToNode `height: ${heightParam.value},` : ""}
|
|
1636
|
+
${locationParam ? expandToNode `left: ${translateExpression(entry, id, locationParam.x, false, generatingProperty)},
|
|
1637
|
+
top: ${translateExpression(entry, id, locationParam.y, false, generatingProperty)},` : ""}
|
|
1638
|
+
${timeLimitParam ? expandToNode `timeLimit: ${durationExpression},` : ""}
|
|
1639
|
+
}, {recipients: [targetedUser]});
|
|
1640
|
+
});
|
|
1569
1641
|
`;
|
|
1570
1642
|
}
|
|
1571
1643
|
// Self-target: open the generated Vue prompt app (game.system.prompts.<doc><action>).
|
|
1572
1644
|
// The app resolves this promise with the user's input (or {} on cancel/close).
|
|
1573
|
-
return expandToNode `
|
|
1574
|
-
await new Promise(async (resolve, reject) => {
|
|
1575
|
-
const promptApp = new game.system.prompts.${promptKey}(context.object, { promptResolve: resolve });
|
|
1576
|
-
promptApp.render(true);
|
|
1577
|
-
});
|
|
1645
|
+
return expandToNode `
|
|
1646
|
+
await new Promise(async (resolve, reject) => {
|
|
1647
|
+
const promptApp = new game.system.prompts.${promptKey}(context.object, { promptResolve: resolve });
|
|
1648
|
+
promptApp.render(true);
|
|
1649
|
+
});
|
|
1578
1650
|
`;
|
|
1579
1651
|
}
|
|
1580
1652
|
if (isMathExpression(expression)) {
|
|
1581
1653
|
expression = expression;
|
|
1582
1654
|
console.log("Translating Math Expression: ", expression.operation);
|
|
1583
1655
|
if (isMathEmptyExpression(expression)) {
|
|
1584
|
-
return expandToNode `
|
|
1585
|
-
Math.${expression.operation}()
|
|
1656
|
+
return expandToNode `
|
|
1657
|
+
Math.${expression.operation}()
|
|
1586
1658
|
`;
|
|
1587
1659
|
}
|
|
1588
1660
|
if (isMathSingleExpression(expression)) {
|
|
1589
|
-
return expandToNode `
|
|
1590
|
-
Math.${expression.operation}(${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)})
|
|
1661
|
+
return expandToNode `
|
|
1662
|
+
Math.${expression.operation}(${translateExpression(entry, id, expression.exp, preDerived, generatingProperty)})
|
|
1591
1663
|
`;
|
|
1592
1664
|
}
|
|
1593
1665
|
if (isMathParamExpression(expression)) {
|
|
1594
|
-
return expandToNode `
|
|
1595
|
-
Math.${expression.operation}(${joinToNode(expression.params, x => translateExpression(entry, id, x, preDerived, generatingProperty), { separator: ", " })})
|
|
1666
|
+
return expandToNode `
|
|
1667
|
+
Math.${expression.operation}(${joinToNode(expression.params, x => translateExpression(entry, id, x, preDerived, generatingProperty), { separator: ", " })})
|
|
1596
1668
|
`;
|
|
1597
1669
|
}
|
|
1598
1670
|
throw new Error("Unknown Math Expression type encountered while translating to JavaScript ");
|
|
1599
1671
|
}
|
|
1600
1672
|
if (isLogExpression(expression)) {
|
|
1601
1673
|
console.log("Translating Log Expression: ");
|
|
1602
|
-
return expandToNode `
|
|
1603
|
-
console.log(${joinToNode(expression.params, x => translateExpression(entry, id, x, preDerived, generatingProperty), { separator: ", " })})
|
|
1674
|
+
return expandToNode `
|
|
1675
|
+
console.log(${joinToNode(expression.params, x => translateExpression(entry, id, x, preDerived, generatingProperty), { separator: ", " })})
|
|
1604
1676
|
`;
|
|
1605
1677
|
}
|
|
1606
1678
|
if (isUpdate(expression)) {
|
|
1607
1679
|
console.log("Translating Update Expression:");
|
|
1608
1680
|
let systemPath = getSystemPath((_y = expression.property) === null || _y === void 0 ? void 0 : _y.ref, expression.subProperties, (_z = expression.propertyLookup) === null || _z === void 0 ? void 0 : _z.ref, false);
|
|
1609
1681
|
if (isUpdateParent(expression)) {
|
|
1610
|
-
return expandToNode `
|
|
1611
|
-
parentUpdate["${systemPath}"] = foundry.utils.getProperty(context.object.parent, "system.${systemPath}");
|
|
1682
|
+
return expandToNode `
|
|
1683
|
+
parentUpdate["${systemPath}"] = foundry.utils.getProperty(context.object.parent, "system.${systemPath}");
|
|
1612
1684
|
`;
|
|
1613
1685
|
}
|
|
1614
1686
|
else if (isUpdateSelf(expression)) {
|
|
1615
|
-
return expandToNode `
|
|
1616
|
-
update["system.${systemPath}"] = system.${systemPath};
|
|
1687
|
+
return expandToNode `
|
|
1688
|
+
update["system.${systemPath}"] = system.${systemPath};
|
|
1617
1689
|
`;
|
|
1618
1690
|
}
|
|
1619
1691
|
}
|
|
1620
1692
|
if (isVisibilityValue(expression)) {
|
|
1621
1693
|
console.log("Translating Visibility Value Expression: ", expression.visibility);
|
|
1622
|
-
return expandToNode `
|
|
1623
|
-
"${expression.visibility}"
|
|
1694
|
+
return expandToNode `
|
|
1695
|
+
"${expression.visibility}"
|
|
1624
1696
|
`;
|
|
1625
1697
|
}
|
|
1626
1698
|
if (isFunctionCall(expression)) {
|
|
@@ -1634,16 +1706,16 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1634
1706
|
// closures in the _prepare<Doc>DerivedData scope (see derived-data-generator). They take the
|
|
1635
1707
|
// in-scope `system` and no update/await — derived values run synchronously and must be pure.
|
|
1636
1708
|
if (preDerived) {
|
|
1637
|
-
return expandToNode `
|
|
1638
|
-
function_${(_0 = expression.method.ref) === null || _0 === void 0 ? void 0 : _0.name}(system${expression.params.length ? ", " : ""}${args})
|
|
1709
|
+
return expandToNode `
|
|
1710
|
+
function_${(_0 = expression.method.ref) === null || _0 === void 0 ? void 0 : _0.name}(system${expression.params.length ? ", " : ""}${args})
|
|
1639
1711
|
`;
|
|
1640
1712
|
}
|
|
1641
1713
|
let accessPath = "this";
|
|
1642
1714
|
if (isTrackerExp(generatingProperty)) {
|
|
1643
1715
|
accessPath = "document.sheet";
|
|
1644
1716
|
}
|
|
1645
|
-
return expandToNode `
|
|
1646
|
-
await ${accessPath}.function_${(_1 = expression.method.ref) === null || _1 === void 0 ? void 0 : _1.name}(context, update, embeddedUpdate, parentUpdate, parentEmbeddedUpdate, targetUpdate, targetEmbeddedUpdate, ${args})
|
|
1717
|
+
return expandToNode `
|
|
1718
|
+
await ${accessPath}.function_${(_1 = expression.method.ref) === null || _1 === void 0 ? void 0 : _1.name}(context, update, embeddedUpdate, parentUpdate, parentEmbeddedUpdate, targetUpdate, targetEmbeddedUpdate, ${args})
|
|
1647
1719
|
`;
|
|
1648
1720
|
}
|
|
1649
1721
|
if (isNumberRange(expression)) {
|
|
@@ -1651,8 +1723,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1651
1723
|
const to = translateExpression(entry, id, expression.end, preDerived, generatingProperty);
|
|
1652
1724
|
console.log("Translating Number Range Expression: ", from, to);
|
|
1653
1725
|
// Make a JS array of numbers from from to to
|
|
1654
|
-
return expandToNode `
|
|
1655
|
-
Array.from({length: ${to} - ${from} + 1}, (_, i) => ${from} + i)
|
|
1726
|
+
return expandToNode `
|
|
1727
|
+
Array.from({length: ${to} - ${from} + 1}, (_, i) => ${from} + i)
|
|
1656
1728
|
`;
|
|
1657
1729
|
}
|
|
1658
1730
|
if (isWait(expression)) {
|
|
@@ -1666,8 +1738,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1666
1738
|
else if (units === "minutes") {
|
|
1667
1739
|
durationMod = ` * 60 * 1000`;
|
|
1668
1740
|
}
|
|
1669
|
-
return expandToNode `
|
|
1670
|
-
await new Promise(resolve => setTimeout(resolve, ${duration}${durationMod})); // Wait for ${expression.duration} ${units}
|
|
1741
|
+
return expandToNode `
|
|
1742
|
+
await new Promise(resolve => setTimeout(resolve, ${duration}${durationMod})); // Wait for ${expression.duration} ${units}
|
|
1671
1743
|
`;
|
|
1672
1744
|
}
|
|
1673
1745
|
if (isPlayAudio(expression)) {
|
|
@@ -1676,44 +1748,44 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1676
1748
|
return undefined;
|
|
1677
1749
|
const volumeParam = expression.params.find(x => isPlayAudioVolume(x));
|
|
1678
1750
|
const volume = (_2 = volumeParam === null || volumeParam === void 0 ? void 0 : volumeParam.value) !== null && _2 !== void 0 ? _2 : 0.5;
|
|
1679
|
-
return expandToNode `
|
|
1680
|
-
await game.system.utils.playSfx(${translateExpression(entry, id, fileParam.value, false, generatingProperty)}, ${translateExpression(entry, id, volume, false, generatingProperty)});
|
|
1751
|
+
return expandToNode `
|
|
1752
|
+
await game.system.utils.playSfx(${translateExpression(entry, id, fileParam.value, false, generatingProperty)}, ${translateExpression(entry, id, volume, false, generatingProperty)});
|
|
1681
1753
|
`;
|
|
1682
1754
|
}
|
|
1683
1755
|
if (isCombatMethods(expression)) {
|
|
1684
1756
|
const method = expression.method;
|
|
1685
|
-
return expandToNode `
|
|
1686
|
-
if (!game.combat) {
|
|
1687
|
-
return;
|
|
1688
|
-
}
|
|
1689
|
-
if (game.combat.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)) {
|
|
1690
|
-
${method == "nextTurn" ? expandToNode `game.combat.nextTurn();` : ""}
|
|
1691
|
-
${method == "end" ? expandToNode `game.combat.endCombat();` : ""}
|
|
1692
|
-
}
|
|
1693
|
-
else {
|
|
1694
|
-
await new Promise((resolve, reject) => {
|
|
1695
|
-
const firstGm = game.users.find(u => u.isGM && u.active);
|
|
1696
|
-
if (!firstGm) {
|
|
1697
|
-
ui.notifications.error("No active GM found to handle combat method request");
|
|
1698
|
-
return;
|
|
1699
|
-
}
|
|
1700
|
-
const uuid = foundry.utils.randomID();
|
|
1701
|
-
|
|
1702
|
-
// Setup a listener that will wait for this response
|
|
1703
|
-
game.socket.on("system.${id}", (data) => {
|
|
1704
|
-
if (data.type != "combatResponse" || data.uuid != uuid) return;
|
|
1705
|
-
|
|
1706
|
-
resolve();
|
|
1707
|
-
});
|
|
1708
|
-
|
|
1709
|
-
game.socket.emit("system.${id}", {
|
|
1710
|
-
uuid: uuid,
|
|
1711
|
-
type: "combat",
|
|
1712
|
-
userId: game.user.id,
|
|
1713
|
-
method: "${method}",
|
|
1714
|
-
}, {recipients: [firstGm.id]});
|
|
1715
|
-
});
|
|
1716
|
-
}
|
|
1757
|
+
return expandToNode `
|
|
1758
|
+
if (!game.combat) {
|
|
1759
|
+
return;
|
|
1760
|
+
}
|
|
1761
|
+
if (game.combat.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)) {
|
|
1762
|
+
${method == "nextTurn" ? expandToNode `game.combat.nextTurn();` : ""}
|
|
1763
|
+
${method == "end" ? expandToNode `game.combat.endCombat();` : ""}
|
|
1764
|
+
}
|
|
1765
|
+
else {
|
|
1766
|
+
await new Promise((resolve, reject) => {
|
|
1767
|
+
const firstGm = game.users.find(u => u.isGM && u.active);
|
|
1768
|
+
if (!firstGm) {
|
|
1769
|
+
ui.notifications.error("No active GM found to handle combat method request");
|
|
1770
|
+
return;
|
|
1771
|
+
}
|
|
1772
|
+
const uuid = foundry.utils.randomID();
|
|
1773
|
+
|
|
1774
|
+
// Setup a listener that will wait for this response
|
|
1775
|
+
game.socket.on("system.${id}", (data) => {
|
|
1776
|
+
if (data.type != "combatResponse" || data.uuid != uuid) return;
|
|
1777
|
+
|
|
1778
|
+
resolve();
|
|
1779
|
+
});
|
|
1780
|
+
|
|
1781
|
+
game.socket.emit("system.${id}", {
|
|
1782
|
+
uuid: uuid,
|
|
1783
|
+
type: "combat",
|
|
1784
|
+
userId: game.user.id,
|
|
1785
|
+
method: "${method}",
|
|
1786
|
+
}, {recipients: [firstGm.id]});
|
|
1787
|
+
});
|
|
1788
|
+
}
|
|
1717
1789
|
`;
|
|
1718
1790
|
}
|
|
1719
1791
|
if (isCombatProperty(expression)) {
|
|
@@ -1736,8 +1808,8 @@ export function translateExpression(entry, id, expression, preDerived = false, g
|
|
|
1736
1808
|
}
|
|
1737
1809
|
if (isMacroExecute(expression)) {
|
|
1738
1810
|
const systemPath = getSystemPath(expression.macro.ref, [], undefined, false);
|
|
1739
|
-
return expandToNode `
|
|
1740
|
-
await context.object.${systemPath}?.execute();
|
|
1811
|
+
return expandToNode `
|
|
1812
|
+
await context.object.${systemPath}?.execute();
|
|
1741
1813
|
`;
|
|
1742
1814
|
}
|
|
1743
1815
|
console.log(expression.$type);
|
|
@@ -1796,4 +1868,24 @@ export function translateBodyExpressionToJavascript(entry, id, body, preDerived
|
|
|
1796
1868
|
// */
|
|
1797
1869
|
return joinToNode(body, (expression) => translateExpression(entry, id, expression, preDerived, generatingProperty), { appendNewLineIfNotEmpty: true });
|
|
1798
1870
|
}
|
|
1871
|
+
// Compile a rollVisualizer field's value: expression into a Foundry roll formula
|
|
1872
|
+
// string (containing @refs) plus the data object that resolves those refs from the
|
|
1873
|
+
// live, reactive document/prompt context. This mirrors the roll() codegen path but
|
|
1874
|
+
// returns the two pieces separately, so the visualizer component can ANALYZE the
|
|
1875
|
+
// formula (convolve / simulate) rather than evaluate it as a roll.
|
|
1876
|
+
//
|
|
1877
|
+
// Phase 1 supports Expression values (including an explicit roll(...) node). A
|
|
1878
|
+
// MethodBlock value yields an empty formula -- there is nothing to visualize from a
|
|
1879
|
+
// statically-unknown computed string -- and the component renders its empty state.
|
|
1880
|
+
export function compileVisualizerFormula(entry, id, field) {
|
|
1881
|
+
const valueParam = field.params.find(isRollVisualizerValueParam);
|
|
1882
|
+
const value = valueParam === null || valueParam === void 0 ? void 0 : valueParam.value;
|
|
1883
|
+
if (!value || isMethodBlock(value)) {
|
|
1884
|
+
return { formula: expandToNode `""`, data: expandToNode `{}` };
|
|
1885
|
+
}
|
|
1886
|
+
const parts = isRoll(value) ? value.parts : [value];
|
|
1887
|
+
const formula = expandToNode `${joinToNode(parts, e => translateDiceParts(e, true), { separator: " + " })}`;
|
|
1888
|
+
const data = expandToNode `{${joinToNode(parts, e => translateDiceData(e, entry, id, false, undefined), { separator: ", " })}}`;
|
|
1889
|
+
return { formula, data };
|
|
1890
|
+
}
|
|
1799
1891
|
//# sourceMappingURL=method-generator.js.map
|