@servicetitan/dte-pdf-editor 1.34.0 → 1.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -12
- package/dist/components/display-conditions/condition-row.d.ts.map +1 -1
- package/dist/components/display-conditions/condition-row.js +1 -1
- package/dist/components/display-conditions/condition-row.js.map +1 -1
- package/dist/components/field-config-panel/advanced-settings.d.ts.map +1 -1
- package/dist/components/field-config-panel/advanced-settings.js +20 -10
- package/dist/components/field-config-panel/advanced-settings.js.map +1 -1
- package/dist/components/field-config-panel/formula-generator.d.ts.map +1 -1
- package/dist/components/field-config-panel/formula-generator.js +2 -1
- package/dist/components/field-config-panel/formula-generator.js.map +1 -1
- package/dist/components/field-config-panel/formula-modal.d.ts.map +1 -1
- package/dist/components/field-config-panel/formula-modal.js +47 -6
- package/dist/components/field-config-panel/formula-modal.js.map +1 -1
- package/dist/components/field-config-panel/formula-workspace.d.ts +1 -0
- package/dist/components/field-config-panel/formula-workspace.d.ts.map +1 -1
- package/dist/components/field-config-panel/formula-workspace.js +10 -4
- package/dist/components/field-config-panel/formula-workspace.js.map +1 -1
- package/dist/components/field-config-panel/result-type-selector.d.ts.map +1 -1
- package/dist/components/field-config-panel/result-type-selector.js +1 -0
- package/dist/components/field-config-panel/result-type-selector.js.map +1 -1
- package/dist/components/pdf-view/pdf-view-calculated.d.ts +1 -0
- package/dist/components/pdf-view/pdf-view-calculated.d.ts.map +1 -1
- package/dist/components/pdf-view/pdf-view-calculated.js +20 -3
- package/dist/components/pdf-view/pdf-view-calculated.js.map +1 -1
- package/dist/components/pdf-view/pdf-view-fillable.d.ts.map +1 -1
- package/dist/components/pdf-view/pdf-view-fillable.js +5 -2
- package/dist/components/pdf-view/pdf-view-fillable.js.map +1 -1
- package/dist/components/pdf-view/pdf-view.d.ts +6 -0
- package/dist/components/pdf-view/pdf-view.d.ts.map +1 -1
- package/dist/components/pdf-view/pdf-view.js +2 -2
- package/dist/components/pdf-view/pdf-view.js.map +1 -1
- package/dist/constants/calculated.constants.d.ts +2 -0
- package/dist/constants/calculated.constants.d.ts.map +1 -1
- package/dist/constants/calculated.constants.js +2 -0
- package/dist/constants/calculated.constants.js.map +1 -1
- package/dist/hooks/useFormulaEditor.d.ts +3 -0
- package/dist/hooks/useFormulaEditor.d.ts.map +1 -1
- package/dist/hooks/useFormulaEditor.js +43 -35
- package/dist/hooks/useFormulaEditor.js.map +1 -1
- package/dist/interface/types.d.ts +7 -1
- package/dist/interface/types.d.ts.map +1 -1
- package/dist/interface/types.js.map +1 -1
- package/dist/utils/conditions/schema-data-points.utils.d.ts.map +1 -1
- package/dist/utils/conditions/schema-data-points.utils.js +4 -1
- package/dist/utils/conditions/schema-data-points.utils.js.map +1 -1
- package/dist/utils/data-model/extract-fields.utils.d.ts.map +1 -1
- package/dist/utils/data-model/extract-fields.utils.js +11 -1
- package/dist/utils/data-model/extract-fields.utils.js.map +1 -1
- package/dist/utils/formula/caret.utils.js +4 -4
- package/dist/utils/formula/caret.utils.js.map +1 -1
- package/dist/utils/formula/dom.utils.js +2 -2
- package/dist/utils/formula/dom.utils.js.map +1 -1
- package/dist/utils/formula/evaluate-formula.utils.d.ts +10 -2
- package/dist/utils/formula/evaluate-formula.utils.d.ts.map +1 -1
- package/dist/utils/formula/evaluate-formula.utils.js +205 -4
- package/dist/utils/formula/evaluate-formula.utils.js.map +1 -1
- package/dist/utils/formula/expression.utils.d.ts +10 -9
- package/dist/utils/formula/expression.utils.d.ts.map +1 -1
- package/dist/utils/formula/expression.utils.js +39 -41
- package/dist/utils/formula/expression.utils.js.map +1 -1
- package/dist/utils/formula/format-calculated-result.utils.d.ts +1 -1
- package/dist/utils/formula/format-calculated-result.utils.d.ts.map +1 -1
- package/dist/utils/formula/format-calculated-result.utils.js +29 -8
- package/dist/utils/formula/format-calculated-result.utils.js.map +1 -1
- package/dist/utils/formula/index.d.ts +0 -2
- package/dist/utils/formula/index.d.ts.map +1 -1
- package/dist/utils/formula/index.js +0 -2
- package/dist/utils/formula/index.js.map +1 -1
- package/dist/utils/formula/validate-formula.utils.d.ts +1 -1
- package/dist/utils/formula/validate-formula.utils.d.ts.map +1 -1
- package/dist/utils/formula/validate-formula.utils.js +15 -1
- package/dist/utils/formula/validate-formula.utils.js.map +1 -1
- package/dist/utils/shared/date.utils.d.ts +2 -0
- package/dist/utils/shared/date.utils.d.ts.map +1 -0
- package/dist/utils/shared/date.utils.js +6 -0
- package/dist/utils/shared/date.utils.js.map +1 -0
- package/dist/utils/shared/index.d.ts +1 -0
- package/dist/utils/shared/index.d.ts.map +1 -1
- package/dist/utils/shared/index.js +1 -0
- package/dist/utils/shared/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/display-conditions/condition-row.tsx +1 -0
- package/src/components/field-config-panel/advanced-settings.tsx +103 -77
- package/src/components/field-config-panel/formula-generator.tsx +2 -1
- package/src/components/field-config-panel/formula-modal.tsx +46 -6
- package/src/components/field-config-panel/formula-workspace.tsx +21 -7
- package/src/components/field-config-panel/result-type-selector.tsx +1 -0
- package/src/components/pdf-view/pdf-view-calculated.tsx +20 -3
- package/src/components/pdf-view/pdf-view-fillable.tsx +6 -3
- package/src/components/pdf-view/pdf-view.tsx +8 -0
- package/src/constants/calculated.constants.ts +4 -0
- package/src/hooks/useFormulaEditor.ts +108 -97
- package/src/interface/types.ts +8 -1
- package/src/utils/conditions/schema-data-points.utils.ts +4 -1
- package/src/utils/data-model/extract-fields.utils.ts +13 -1
- package/src/utils/formula/caret.utils.ts +1 -1
- package/src/utils/formula/dom.utils.ts +1 -1
- package/src/utils/formula/evaluate-formula.utils.ts +271 -5
- package/src/utils/formula/expression.utils.ts +44 -47
- package/src/utils/formula/format-calculated-result.utils.ts +32 -10
- package/src/utils/formula/index.ts +0 -2
- package/src/utils/formula/validate-formula.utils.ts +24 -0
- package/src/utils/shared/date.utils.ts +6 -0
- package/src/utils/shared/index.ts +1 -0
- package/dist/utils/formula/referenced-paths.utils.d.ts +0 -7
- package/dist/utils/formula/referenced-paths.utils.d.ts.map +0 -1
- package/dist/utils/formula/referenced-paths.utils.js +0 -18
- package/dist/utils/formula/referenced-paths.utils.js.map +0 -1
- package/dist/utils/formula/serialize-formula.utils.d.ts +0 -14
- package/dist/utils/formula/serialize-formula.utils.d.ts.map +0 -1
- package/dist/utils/formula/serialize-formula.utils.js +0 -33
- package/dist/utils/formula/serialize-formula.utils.js.map +0 -1
- package/src/utils/formula/referenced-paths.utils.ts +0 -18
- package/src/utils/formula/serialize-formula.utils.ts +0 -40
|
@@ -20,6 +20,21 @@ export function valueToNumber(raw) {
|
|
|
20
20
|
const n = Number(s);
|
|
21
21
|
return Number.isNaN(n) ? 0 : n;
|
|
22
22
|
}
|
|
23
|
+
function hasAllFieldValues(formula, data, dateFieldPaths) {
|
|
24
|
+
return formula.tokens.every((t) => {
|
|
25
|
+
if (t.type !== 'field') {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
const raw = resolvePdfDataValues(data, t.path);
|
|
29
|
+
if (raw === '') {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (dateFieldPaths === null || dateFieldPaths === void 0 ? void 0 : dateFieldPaths.has(t.path)) {
|
|
33
|
+
return !isNaN(new Date(raw).getTime());
|
|
34
|
+
}
|
|
35
|
+
return !isNaN(Number(raw.trim()));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
23
38
|
function resolveTokens(formula, data) {
|
|
24
39
|
return formula.tokens.map((t) => {
|
|
25
40
|
if (t.type === 'field') {
|
|
@@ -101,7 +116,6 @@ function evalResolvedTokens(tokens) {
|
|
|
101
116
|
return tokens[0].value;
|
|
102
117
|
}
|
|
103
118
|
const list = [...tokens];
|
|
104
|
-
// Resolve innermost parentheses first
|
|
105
119
|
let idx = 0;
|
|
106
120
|
while (idx < list.length) {
|
|
107
121
|
if (list[idx].type === 'lparen') {
|
|
@@ -118,15 +132,202 @@ function evalResolvedTokens(tokens) {
|
|
|
118
132
|
}
|
|
119
133
|
return evalFlat(list);
|
|
120
134
|
}
|
|
135
|
+
function isTypedValue(t) {
|
|
136
|
+
return 'kind' in t;
|
|
137
|
+
}
|
|
138
|
+
function parseDateValue(raw) {
|
|
139
|
+
const d = new Date(raw);
|
|
140
|
+
return isNaN(d.getTime()) ? NaN : d.getTime();
|
|
141
|
+
}
|
|
142
|
+
function toDateOnly(ms) {
|
|
143
|
+
const d = new Date(ms);
|
|
144
|
+
d.setUTCHours(0, 0, 0, 0);
|
|
145
|
+
return d;
|
|
146
|
+
}
|
|
147
|
+
function toDateKey(d) {
|
|
148
|
+
const y = d.getUTCFullYear();
|
|
149
|
+
const m = String(d.getUTCMonth() + 1).padStart(2, '0');
|
|
150
|
+
const day = String(d.getUTCDate()).padStart(2, '0');
|
|
151
|
+
return `${y}-${m}-${day}`;
|
|
152
|
+
}
|
|
153
|
+
function isWeekend(d) {
|
|
154
|
+
const day = d.getUTCDay();
|
|
155
|
+
return day === 0 || day === 6;
|
|
156
|
+
}
|
|
157
|
+
function buildHolidaySet(holidays) {
|
|
158
|
+
if (!(holidays === null || holidays === void 0 ? void 0 : holidays.length)) {
|
|
159
|
+
return new Set();
|
|
160
|
+
}
|
|
161
|
+
const set = new Set();
|
|
162
|
+
for (const h of holidays) {
|
|
163
|
+
const d = toDateOnly(new Date(h).getTime());
|
|
164
|
+
if (!isNaN(d.getTime())) {
|
|
165
|
+
set.add(toDateKey(d));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return set;
|
|
169
|
+
}
|
|
170
|
+
function isNonBusinessDay(d, holidaySet) {
|
|
171
|
+
return isWeekend(d) || (holidaySet.size > 0 && holidaySet.has(toDateKey(d)));
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Add business days to a date (epoch ms), skipping weekends and holidays.
|
|
175
|
+
* Returns the resulting date as epoch ms.
|
|
176
|
+
*/
|
|
177
|
+
function addBusinessDays(startMs, days, holidaySet) {
|
|
178
|
+
const result = toDateOnly(startMs);
|
|
179
|
+
if (!isFinite(result.getTime())) {
|
|
180
|
+
return result.getTime();
|
|
181
|
+
}
|
|
182
|
+
const intDays = Math.trunc(days);
|
|
183
|
+
if (intDays === 0) {
|
|
184
|
+
return result.getTime();
|
|
185
|
+
}
|
|
186
|
+
const direction = intDays > 0 ? 1 : -1;
|
|
187
|
+
let remaining = Math.abs(intDays);
|
|
188
|
+
while (remaining > 0) {
|
|
189
|
+
result.setUTCDate(result.getUTCDate() + direction);
|
|
190
|
+
if (!isNonBusinessDay(result, holidaySet)) {
|
|
191
|
+
remaining--;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return result.getTime();
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Count business days between two dates (epoch ms), skipping weekends and holidays.
|
|
198
|
+
* Positive when `toMs` is after `fromMs`, negative otherwise.
|
|
199
|
+
*/
|
|
200
|
+
function businessDayDiff(fromMs, toMs, holidaySet) {
|
|
201
|
+
const start = toDateOnly(fromMs);
|
|
202
|
+
const end = toDateOnly(toMs);
|
|
203
|
+
if (!isFinite(start.getTime()) || !isFinite(end.getTime())) {
|
|
204
|
+
return 0;
|
|
205
|
+
}
|
|
206
|
+
const direction = end.getTime() >= start.getTime() ? 1 : -1;
|
|
207
|
+
const cursor = new Date(start.getTime());
|
|
208
|
+
let count = 0;
|
|
209
|
+
while (toDateKey(cursor) !== toDateKey(end)) {
|
|
210
|
+
cursor.setUTCDate(cursor.getUTCDate() + direction);
|
|
211
|
+
if (!isNonBusinessDay(cursor, holidaySet)) {
|
|
212
|
+
count++;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return count * direction;
|
|
216
|
+
}
|
|
217
|
+
function resolveDateAwareTokens(formula, data, dateFieldPaths) {
|
|
218
|
+
return formula.tokens.map((t) => {
|
|
219
|
+
if (t.type === 'field') {
|
|
220
|
+
const raw = resolvePdfDataValues(data, t.path);
|
|
221
|
+
if (dateFieldPaths.has(t.path)) {
|
|
222
|
+
const ms = parseDateValue(raw);
|
|
223
|
+
return { kind: 'date', value: isNaN(ms) ? 0 : ms };
|
|
224
|
+
}
|
|
225
|
+
return { kind: 'number', value: valueToNumber(raw) };
|
|
226
|
+
}
|
|
227
|
+
if (t.type === 'number') {
|
|
228
|
+
return { kind: 'number', value: valueToNumber(t.value) };
|
|
229
|
+
}
|
|
230
|
+
return t;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Apply an operator to two typed values with date-aware, business-day semantics:
|
|
235
|
+
* date + number → add business days → date
|
|
236
|
+
* number + date → add business days → date
|
|
237
|
+
* date - number → sub business days → date
|
|
238
|
+
* date - date → business day diff → number
|
|
239
|
+
* number ± number → normal → number
|
|
240
|
+
*/
|
|
241
|
+
function applyDateOp(a, op, b, holidaySet) {
|
|
242
|
+
if (a.kind === 'date' && b.kind === 'number') {
|
|
243
|
+
if (op === '+') {
|
|
244
|
+
return { kind: 'date', value: addBusinessDays(a.value, b.value, holidaySet) };
|
|
245
|
+
}
|
|
246
|
+
if (op === '-') {
|
|
247
|
+
return { kind: 'date', value: addBusinessDays(a.value, -b.value, holidaySet) };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (a.kind === 'number' && b.kind === 'date' && op === '+') {
|
|
251
|
+
return { kind: 'date', value: addBusinessDays(b.value, a.value, holidaySet) };
|
|
252
|
+
}
|
|
253
|
+
if (a.kind === 'date' && b.kind === 'date' && op === '-') {
|
|
254
|
+
return { kind: 'number', value: businessDayDiff(a.value, b.value, holidaySet) };
|
|
255
|
+
}
|
|
256
|
+
return { kind: 'number', value: applyOp(a.value, op, b.value) };
|
|
257
|
+
}
|
|
258
|
+
function evalDateFlat(tokens, holidaySet) {
|
|
259
|
+
const list = [...tokens];
|
|
260
|
+
for (let i = 1; i < list.length - 1;) {
|
|
261
|
+
const t = list[i];
|
|
262
|
+
if ('type' in t && t.type === 'operator' && (t.value === '+' || t.value === '-')) {
|
|
263
|
+
const left = list[i - 1];
|
|
264
|
+
const right = list[i + 1];
|
|
265
|
+
if (isTypedValue(left) && isTypedValue(right)) {
|
|
266
|
+
const result = applyDateOp(left, t.value, right, holidaySet);
|
|
267
|
+
list.splice(i - 1, 3, result);
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
i += 2;
|
|
272
|
+
}
|
|
273
|
+
const single = list[0];
|
|
274
|
+
return isTypedValue(single) ? single : { kind: 'number', value: 0 };
|
|
275
|
+
}
|
|
276
|
+
function evalDateAwareTokens(tokens, holidaySet) {
|
|
277
|
+
if (tokens.length === 0) {
|
|
278
|
+
return { kind: 'number', value: 0 };
|
|
279
|
+
}
|
|
280
|
+
if (tokens.length === 1 && isTypedValue(tokens[0])) {
|
|
281
|
+
return tokens[0];
|
|
282
|
+
}
|
|
283
|
+
const list = [...tokens];
|
|
284
|
+
let idx = 0;
|
|
285
|
+
while (idx < list.length) {
|
|
286
|
+
if ('type' in list[idx] && list[idx].type === 'lparen') {
|
|
287
|
+
const close = findMatchingParen(list, idx);
|
|
288
|
+
if (close === -1) {
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
const inner = list.slice(idx + 1, close);
|
|
292
|
+
const result = evalDateAwareTokens(inner, holidaySet);
|
|
293
|
+
list.splice(idx, close - idx + 1, result);
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
idx++;
|
|
297
|
+
}
|
|
298
|
+
return evalDateFlat(list, holidaySet);
|
|
299
|
+
}
|
|
300
|
+
/*
|
|
301
|
+
* ---------------------------------------------------------------------------
|
|
302
|
+
* Public API
|
|
303
|
+
* ---------------------------------------------------------------------------
|
|
304
|
+
*/
|
|
121
305
|
/**
|
|
122
306
|
* Evaluate a structured formula with the given data.
|
|
123
307
|
* Field tokens are resolved via resolvePdfDataValues; string values are converted to number.
|
|
124
|
-
* Supports +, -, *, / and parentheses.
|
|
308
|
+
* Supports +, -, *, / and parentheses.
|
|
309
|
+
*
|
|
310
|
+
* Returns `null` when the formula is empty **or** when any field token resolves
|
|
311
|
+
* to null / undefined / empty / non-numeric (non-date) — making the entire
|
|
312
|
+
* calculation blank instead of silently substituting 0.
|
|
313
|
+
*
|
|
314
|
+
* When `dateFieldPaths` is provided, date fields are resolved to epoch-ms and
|
|
315
|
+
* arithmetic follows business-day semantics — weekends and holidays are skipped
|
|
316
|
+
* when adding/subtracting days, and date diffs count only business days.
|
|
125
317
|
*/
|
|
126
|
-
export function evaluateFormula(formula, data) {
|
|
318
|
+
export function evaluateFormula(formula, data, dateFieldPaths, holidays) {
|
|
127
319
|
var _a;
|
|
128
320
|
if (!((_a = formula === null || formula === void 0 ? void 0 : formula.tokens) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
129
|
-
return
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
if (!hasAllFieldValues(formula, data, dateFieldPaths)) {
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
if (dateFieldPaths === null || dateFieldPaths === void 0 ? void 0 : dateFieldPaths.size) {
|
|
327
|
+
const resolved = resolveDateAwareTokens(formula, data, dateFieldPaths);
|
|
328
|
+
const holidaySet = buildHolidaySet(holidays);
|
|
329
|
+
const result = evalDateAwareTokens(resolved, holidaySet);
|
|
330
|
+
return result.value;
|
|
130
331
|
}
|
|
131
332
|
const resolved = resolveTokens(formula, data);
|
|
132
333
|
return evalResolvedTokens(resolved);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-formula.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/evaluate-formula.utils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACtC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,CAAC;IACf,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACX,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAQD,SAAS,aAAa,CAClB,OAA0B,EAC1B,IAAiC;IAEjC,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAe,EAAiB,EAAE;QACzD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,CAAC;QACD,OAAO,CAAkB,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,OAAO,CAAC,CAAS,EAAE,EAAmB,EAAE,CAAS;IACtD,QAAQ,EAAE,EAAE,CAAC;QACT,KAAK,GAAG;YACJ,OAAO,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,GAAG;YACJ,OAAO,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,GAAG;YACJ,OAAO,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,GAAG;YACJ,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/B;YACI,OAAO,CAAC,CAAC;IACjB,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,SAAS,iBAAiB,CAAC,MAAuB,EAAE,SAAiB;IACjE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACd,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,CAAC;YACb,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACd,CAAC;AAED,oEAAoE;AACpE,SAAS,QAAQ,CAAC,MAAuB;IACrC,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACzB,sBAAsB;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAI,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,GAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAuC,CAAC,KAAK,CAAC;YACnE,MAAM,CAAC,GAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAuC,CAAC,KAAK,CAAC;YACnE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,SAAS;QACb,CAAC;QACD,CAAC,IAAI,CAAC,CAAC;IACX,CAAC;IACD,uBAAuB;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAI,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,GAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAuC,CAAC,KAAK,CAAC;YACnE,MAAM,CAAC,GAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAuC,CAAC,KAAK,CAAC;YACnE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,SAAS;QACb,CAAC;QACD,CAAC,IAAI,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAuB;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAEzB,sCAAsC;IACtC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,MAAM;YACV,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,SAAS;QACb,CAAC;QACD,GAAG,EAAE,CAAC;IACV,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC3B,OAA6C,EAC7C,IAAiC;;IAEjC,IAAI,CAAC,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,MAAM,CAAA,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC"}
|
|
1
|
+
{"version":3,"file":"evaluate-formula.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/evaluate-formula.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,16 +15,17 @@ export declare function tokenizeExpression(expression: string): ExpressionPart[]
|
|
|
15
15
|
* Invalid or unknown identifiers are skipped (or could be left as placeholder); only known paths become field tokens.
|
|
16
16
|
*/
|
|
17
17
|
export declare function parseExpression(expression: string, validPaths: Set<string>, pathToLabel: Map<string, string>): FormulaToken[];
|
|
18
|
-
export interface
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
export interface NormalizeMergeTagsResult {
|
|
19
|
+
normalized: string;
|
|
20
|
+
removed: {
|
|
21
|
+
start: number;
|
|
22
|
+
end: number;
|
|
23
|
+
} | null;
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* - If there is exactly one space: remove the left field and the space.
|
|
27
|
-
* Otherwise, returns null.
|
|
26
|
+
* When two merge tags (valid field paths) become adjacent with no separator,
|
|
27
|
+
* removes the LEFT tag so merge tags stay atomic. Returns the normalized
|
|
28
|
+
* expression and the removed range (for caret adjustment).
|
|
28
29
|
*/
|
|
29
|
-
export declare function
|
|
30
|
+
export declare function normalizeMergeTags(expression: string, validPaths: Set<string>): NormalizeMergeTagsResult;
|
|
30
31
|
//# sourceMappingURL=expression.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/expression.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAcjF;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAgBvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,YAAY,EAAE,CAyChB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"expression.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/expression.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAcjF;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAgBvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,YAAY,EAAE,CAyChB;AAED,MAAM,WAAW,wBAAwB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAClD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,wBAAwB,CAqC1B"}
|
|
@@ -18,7 +18,7 @@ export function tokensToExpression(formula) {
|
|
|
18
18
|
.replace(/\s+/g, ' ')
|
|
19
19
|
.trim();
|
|
20
20
|
}
|
|
21
|
-
// Field paths may contain hyphens (e.g
|
|
21
|
+
// Field paths may contain hyphens (e.g., fillable_recipient_uuid with UUIDs)
|
|
22
22
|
const EXPRESSION_REGEX = /[A-Za-z_][A-Za-z0-9_.-]*|\d+(?:\.\d+)?|[()+\-*/]|\s+|./g;
|
|
23
23
|
export function tokenizeExpression(expression) {
|
|
24
24
|
const tokens = [];
|
|
@@ -82,48 +82,46 @@ export function parseExpression(expression, validPaths, pathToLabel) {
|
|
|
82
82
|
return tokens;
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* - If there is exactly one space: remove the left field and the space.
|
|
89
|
-
* Otherwise, returns null.
|
|
85
|
+
* When two merge tags (valid field paths) become adjacent with no separator,
|
|
86
|
+
* removes the LEFT tag so merge tags stay atomic. Returns the normalized
|
|
87
|
+
* expression and the removed range (for caret adjustment).
|
|
90
88
|
*/
|
|
91
|
-
export function
|
|
92
|
-
if (
|
|
93
|
-
return null;
|
|
89
|
+
export function normalizeMergeTags(expression, validPaths) {
|
|
90
|
+
if (validPaths.size === 0) {
|
|
91
|
+
return { normalized: expression, removed: null };
|
|
94
92
|
}
|
|
95
|
-
const
|
|
96
|
-
let
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
93
|
+
const pathsByLength = [...validPaths].sort((a, b) => b.length - a.length);
|
|
94
|
+
for (let i = 0; i < expression.length; i++) {
|
|
95
|
+
for (const path1 of pathsByLength) {
|
|
96
|
+
if (i + path1.length > expression.length) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const slice1 = expression.slice(i, i + path1.length);
|
|
100
|
+
if (slice1 !== path1) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const beforeFirst = expression[i - 1];
|
|
104
|
+
if (beforeFirst !== undefined && /[A-Za-z0-9_.-]/.test(beforeFirst)) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const restStart = i + path1.length;
|
|
108
|
+
for (const path2 of pathsByLength) {
|
|
109
|
+
if (restStart + path2.length > expression.length) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const slice2 = expression.slice(restStart, restStart + path2.length);
|
|
113
|
+
if (slice2 !== path2) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const afterSecond = expression[restStart + path2.length];
|
|
117
|
+
if (afterSecond !== undefined && /[A-Za-z0-9_.-]/.test(afterSecond)) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const normalized = expression.slice(0, i) + expression.slice(restStart);
|
|
121
|
+
return { normalized, removed: { start: i, end: restStart } };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
124
|
}
|
|
125
|
-
|
|
126
|
-
const newCaret = withPos[prevIdx].start;
|
|
127
|
-
return { newExpression, newCaret };
|
|
125
|
+
return { normalized: expression, removed: null };
|
|
128
126
|
}
|
|
129
127
|
//# sourceMappingURL=expression.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/expression.utils.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAsC;;IACrE,IAAI,CAAC,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,MAAM,CAAA,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC,MAAM;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE;QACL,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,CAAC,IAAI,CAAC;QAClB,CAAC;QACD,OAAQ,CAAuB,CAAC,KAAK,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AAChB,CAAC;AAQD,
|
|
1
|
+
{"version":3,"file":"expression.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/expression.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CalculatedFieldFormat } from '../../interface/types';
|
|
2
2
|
/**
|
|
3
3
|
* Format a calculated formula result for display using advanced settings.
|
|
4
|
-
* Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent), and prefix/postfix.
|
|
4
|
+
* Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent/date), and prefix/postfix.
|
|
5
5
|
*/
|
|
6
6
|
export declare function formatCalculatedResult(value: number, format: CalculatedFieldFormat | undefined): string;
|
|
7
7
|
//# sourceMappingURL=format-calculated-result.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-calculated-result.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format-calculated-result.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AA8D9D;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAC1C,MAAM,CA8BR"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DEFAULT_DATE_FORMAT } from '../../constants';
|
|
1
2
|
function roundValue(value, decimals, mode) {
|
|
2
3
|
const factor = 10 ** decimals;
|
|
3
4
|
const scaled = value * factor;
|
|
@@ -24,27 +25,47 @@ function formatIntegerPart(s, thousandsSeparator, decimalSeparator) {
|
|
|
24
25
|
}
|
|
25
26
|
return parts.join(sep);
|
|
26
27
|
}
|
|
28
|
+
const DATE_FORMAT_TOKENS = {
|
|
29
|
+
YYYY: d => String(d.getFullYear()),
|
|
30
|
+
YY: d => String(d.getFullYear()).slice(-2),
|
|
31
|
+
MMMM: d => d.toLocaleString('en-US', { month: 'long' }),
|
|
32
|
+
MMM: d => d.toLocaleString('en-US', { month: 'short' }),
|
|
33
|
+
MM: d => String(d.getMonth() + 1).padStart(2, '0'),
|
|
34
|
+
M: d => String(d.getMonth() + 1),
|
|
35
|
+
DD: d => String(d.getDate()).padStart(2, '0'),
|
|
36
|
+
D: d => String(d.getDate()),
|
|
37
|
+
};
|
|
38
|
+
const DATE_TOKEN_PATTERN = new RegExp(Object.keys(DATE_FORMAT_TOKENS).join('|'), 'g');
|
|
39
|
+
function formatDateValue(epochMs, dateFormat) {
|
|
40
|
+
const date = new Date(epochMs);
|
|
41
|
+
if (isNaN(date.getTime())) {
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
44
|
+
return dateFormat.replace(DATE_TOKEN_PATTERN, match => {
|
|
45
|
+
const fn = DATE_FORMAT_TOKENS[match];
|
|
46
|
+
return fn ? fn(date) : match;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
27
49
|
/**
|
|
28
50
|
* Format a calculated formula result for display using advanced settings.
|
|
29
|
-
* Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent), and prefix/postfix.
|
|
51
|
+
* Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent/date), and prefix/postfix.
|
|
30
52
|
*/
|
|
31
53
|
export function formatCalculatedResult(value, format) {
|
|
54
|
+
var _a;
|
|
32
55
|
if (format == null) {
|
|
33
56
|
return String(value);
|
|
34
57
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (resultType === 'percent') {
|
|
38
|
-
num = value * 100;
|
|
58
|
+
if (format.resultType === 'date') {
|
|
59
|
+
return formatDateValue(value, (_a = format.dateFormat) !== null && _a !== void 0 ? _a : DEFAULT_DATE_FORMAT);
|
|
39
60
|
}
|
|
40
|
-
const
|
|
61
|
+
const { decimalSeparator, decimalSeparatorEnabled, decimals, postfixText, prefixText, roundingMode, thousandsSeparator, } = format;
|
|
62
|
+
const rounded = roundValue(value, decimals, roundingMode);
|
|
41
63
|
const fixed = rounded.toFixed(decimals);
|
|
42
64
|
const [intPart, decPart] = fixed.split('.');
|
|
43
65
|
const decimalSep = decimalSeparatorEnabled ? decimalSeparator : '.';
|
|
44
66
|
const intFormatted = formatIntegerPart(intPart, thousandsSeparator, decimalSep);
|
|
45
67
|
const decSuffix = decimals > 0 ? decimalSep + (decPart !== null && decPart !== void 0 ? decPart : '') : '';
|
|
46
68
|
const numberStr = intFormatted + decSuffix;
|
|
47
|
-
|
|
48
|
-
return `${prefixText}${numberStr}${suffix}${postfixText}`;
|
|
69
|
+
return `${prefixText}${numberStr}${postfixText}`;
|
|
49
70
|
}
|
|
50
71
|
//# sourceMappingURL=format-calculated-result.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-calculated-result.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format-calculated-result.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,6 @@ export * from './evaluate-formula.utils';
|
|
|
4
4
|
export * from './expression.utils';
|
|
5
5
|
export * from './format-calculated-result.utils';
|
|
6
6
|
export * from './formula-types';
|
|
7
|
-
export * from './referenced-paths.utils';
|
|
8
7
|
export * from './render-formula.utils';
|
|
9
|
-
export * from './serialize-formula.utils';
|
|
10
8
|
export * from './validate-formula.utils';
|
|
11
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC"}
|
|
@@ -4,8 +4,6 @@ export * from './evaluate-formula.utils';
|
|
|
4
4
|
export * from './expression.utils';
|
|
5
5
|
export * from './format-calculated-result.utils';
|
|
6
6
|
export * from './formula-types';
|
|
7
|
-
export * from './referenced-paths.utils';
|
|
8
7
|
export * from './render-formula.utils';
|
|
9
|
-
export * from './serialize-formula.utils';
|
|
10
8
|
export * from './validate-formula.utils';
|
|
11
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC"}
|
|
@@ -7,5 +7,5 @@ export interface FormulaValidationResult {
|
|
|
7
7
|
* Validates a structured formula.
|
|
8
8
|
* Rules: not empty, valid operator placement, balanced parentheses, supported operators only, all field paths exist.
|
|
9
9
|
*/
|
|
10
|
-
export declare function validateFormula(formula: StructuredFormula | undefined | null, validPaths: Set<string>): FormulaValidationResult;
|
|
10
|
+
export declare function validateFormula(formula: StructuredFormula | undefined | null, validPaths: Set<string>, knownDateFields?: Set<string>): FormulaValidationResult;
|
|
11
11
|
//# sourceMappingURL=validate-formula.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-formula.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/validate-formula.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-formula.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/validate-formula.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI,EAC7C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,uBAAuB,CAgGzB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MAX_DATE_CALC_DAYS } from '../../constants';
|
|
1
2
|
function isOperatorToken(t) {
|
|
2
3
|
return t.type === 'operator';
|
|
3
4
|
}
|
|
@@ -8,7 +9,7 @@ function isOperandToken(t) {
|
|
|
8
9
|
* Validates a structured formula.
|
|
9
10
|
* Rules: not empty, valid operator placement, balanced parentheses, supported operators only, all field paths exist.
|
|
10
11
|
*/
|
|
11
|
-
export function validateFormula(formula, validPaths) {
|
|
12
|
+
export function validateFormula(formula, validPaths, knownDateFields) {
|
|
12
13
|
var _a;
|
|
13
14
|
const errors = [];
|
|
14
15
|
if (!((_a = formula === null || formula === void 0 ? void 0 : formula.tokens) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
@@ -78,6 +79,19 @@ export function validateFormula(formula, validPaths) {
|
|
|
78
79
|
if (last && (last.type === 'operator' || last.type === 'lparen')) {
|
|
79
80
|
errors.push('Formula must end with an operand or closing parenthesis');
|
|
80
81
|
}
|
|
82
|
+
if (knownDateFields === null || knownDateFields === void 0 ? void 0 : knownDateFields.size) {
|
|
83
|
+
const hasDateField = tokens.some(t => t.type === 'field' && knownDateFields.has(t.path));
|
|
84
|
+
if (hasDateField) {
|
|
85
|
+
const hasMultiplyOrDivide = tokens.some(t => t.type === 'operator' && (t.value === '*' || t.value === '/'));
|
|
86
|
+
if (hasMultiplyOrDivide) {
|
|
87
|
+
errors.push('Multiply (*) and divide (/) operators cannot be used with date fields. Only +, -, and parentheses are allowed.');
|
|
88
|
+
}
|
|
89
|
+
const hasLargeNumber = tokens.some(t => t.type === 'number' && Math.abs(Number(t.value)) > MAX_DATE_CALC_DAYS);
|
|
90
|
+
if (hasLargeNumber) {
|
|
91
|
+
errors.push(`Number of days cannot exceed ${MAX_DATE_CALC_DAYS} in date calculations.`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
81
95
|
return {
|
|
82
96
|
valid: errors.length === 0,
|
|
83
97
|
errors,
|