@outbuild-company/schedule-core 1.9.3 → 1.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/schedule-core.global.js +1 -1
- package/dist/cdn/schedule-core.global.js.map +1 -1
- package/dist/index.cjs +60 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -3
- package/dist/index.d.ts +9 -3
- package/dist/index.js +60 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -340,6 +340,10 @@ var FIELD_REGISTRY = {
|
|
|
340
340
|
valueKind: "number",
|
|
341
341
|
extract: (activity) => activity.expectedProgressBaseline
|
|
342
342
|
},
|
|
343
|
+
expectedProgress: {
|
|
344
|
+
valueKind: "number",
|
|
345
|
+
extract: (activity) => activity.expectedProgress
|
|
346
|
+
},
|
|
343
347
|
baselineDurationDays: {
|
|
344
348
|
valueKind: "number",
|
|
345
349
|
extract: (activity) => activity.baselineSnapshot?.durationDays ?? null
|
|
@@ -446,12 +450,20 @@ function matchNumber(value, target, operator) {
|
|
|
446
450
|
if (operator === "lessOrEqual") return value <= target;
|
|
447
451
|
return false;
|
|
448
452
|
}
|
|
453
|
+
function matchNumberBetween(value, minimum, maximum) {
|
|
454
|
+
return typeof value === "number" && value >= minimum && value <= maximum;
|
|
455
|
+
}
|
|
449
456
|
function matchDate(value, target, operator) {
|
|
450
457
|
if (!(value instanceof Date)) return false;
|
|
451
458
|
if (operator === "after") return value.getTime() > target.getTime();
|
|
452
459
|
if (operator === "before") return value.getTime() < target.getTime();
|
|
453
460
|
return false;
|
|
454
461
|
}
|
|
462
|
+
function matchDateBetween(value, minimum, maximum) {
|
|
463
|
+
if (!(value instanceof Date)) return false;
|
|
464
|
+
const time = value.getTime();
|
|
465
|
+
return time >= minimum.getTime() && time <= maximum.getTime();
|
|
466
|
+
}
|
|
455
467
|
function matchIdArray(value, allowed, operator) {
|
|
456
468
|
const ids = Array.isArray(value) ? value : [];
|
|
457
469
|
const intersects = ids.some((id) => allowed.has(String(id)));
|
|
@@ -474,6 +486,23 @@ function matchCriterion(activity, criterion, context) {
|
|
|
474
486
|
if (descriptor === null) return false;
|
|
475
487
|
const value = descriptor.extract(activity, context);
|
|
476
488
|
const { operator } = criterion;
|
|
489
|
+
if (operator === "between") {
|
|
490
|
+
if (descriptor.valueKind === "number") {
|
|
491
|
+
return matchNumberBetween(
|
|
492
|
+
value,
|
|
493
|
+
Number(criterion.value),
|
|
494
|
+
Number(criterion.valueTo)
|
|
495
|
+
);
|
|
496
|
+
}
|
|
497
|
+
if (descriptor.valueKind === "date") {
|
|
498
|
+
return matchDateBetween(
|
|
499
|
+
value,
|
|
500
|
+
toTargetDate(criterion.value),
|
|
501
|
+
toTargetDate(criterion.valueTo)
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
return false;
|
|
505
|
+
}
|
|
477
506
|
if (descriptor.valueKind === "string") {
|
|
478
507
|
return matchString(value, String(criterion.value), operator);
|
|
479
508
|
}
|
|
@@ -653,9 +682,10 @@ var OPERATORS_BY_KIND = {
|
|
|
653
682
|
"greaterThan",
|
|
654
683
|
"lessThan",
|
|
655
684
|
"greaterOrEqual",
|
|
656
|
-
"lessOrEqual"
|
|
685
|
+
"lessOrEqual",
|
|
686
|
+
"between"
|
|
657
687
|
]),
|
|
658
|
-
date: /* @__PURE__ */ new Set(["after", "before"]),
|
|
688
|
+
date: /* @__PURE__ */ new Set(["after", "before", "between"]),
|
|
659
689
|
"id-array": /* @__PURE__ */ new Set(["someOf", "notSomeOf"]),
|
|
660
690
|
enum: /* @__PURE__ */ new Set(["someOf", "notSomeOf"]),
|
|
661
691
|
boolean: /* @__PURE__ */ new Set(["someOf", "notSomeOf"]),
|
|
@@ -686,6 +716,9 @@ function normalizeCriterion(criterion) {
|
|
|
686
716
|
if (!OPERATORS_BY_KIND[descriptor.valueKind].has(criterion.operator)) {
|
|
687
717
|
return { ok: false, reason: "unknown_operator" };
|
|
688
718
|
}
|
|
719
|
+
if (criterion.operator === "between") {
|
|
720
|
+
return normalizeBetweenCriterion(criterion, descriptor.valueKind);
|
|
721
|
+
}
|
|
689
722
|
if (descriptor.valueKind === "number") {
|
|
690
723
|
const value = normalizeNumberValue(criterion.value);
|
|
691
724
|
return value === null ? { ok: false, reason: "invalid_value" } : {
|
|
@@ -726,6 +759,31 @@ function normalizeCriterion(criterion) {
|
|
|
726
759
|
}
|
|
727
760
|
return { ok: true, criterion };
|
|
728
761
|
}
|
|
762
|
+
function normalizeBetweenCriterion(criterion, valueKind) {
|
|
763
|
+
if (valueKind === "number") {
|
|
764
|
+
const value = normalizeNumberValue(criterion.value);
|
|
765
|
+
const valueTo = normalizeNumberValue(criterion.valueTo);
|
|
766
|
+
if (value === null || valueTo === null || value > valueTo) {
|
|
767
|
+
return { ok: false, reason: "invalid_value" };
|
|
768
|
+
}
|
|
769
|
+
return {
|
|
770
|
+
ok: true,
|
|
771
|
+
criterion: { ...criterion, value, valueTo }
|
|
772
|
+
};
|
|
773
|
+
}
|
|
774
|
+
if (valueKind === "date") {
|
|
775
|
+
const value = normalizeDateValue(criterion.value);
|
|
776
|
+
const valueTo = normalizeDateValue(criterion.valueTo);
|
|
777
|
+
if (value === null || valueTo === null || value.getTime() > valueTo.getTime()) {
|
|
778
|
+
return { ok: false, reason: "invalid_value" };
|
|
779
|
+
}
|
|
780
|
+
return {
|
|
781
|
+
ok: true,
|
|
782
|
+
criterion: { ...criterion, value, valueTo }
|
|
783
|
+
};
|
|
784
|
+
}
|
|
785
|
+
return { ok: false, reason: "unknown_operator" };
|
|
786
|
+
}
|
|
729
787
|
function validateValueForKind(criterion, valueKind) {
|
|
730
788
|
const { value } = criterion;
|
|
731
789
|
if (valueKind === "boolean") {
|