@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/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") {