@dyrected/core 2.11.0 → 2.12.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/dist/index.js CHANGED
@@ -101,7 +101,7 @@ import {
101
101
  validatePreviewUrlExpression,
102
102
  wordCount,
103
103
  workflowCapabilities
104
- } from "./chunk-H7DVVW2P.js";
104
+ } from "./chunk-VOE2LOLF.js";
105
105
  import "./chunk-JSBRDJBE.js";
106
106
 
107
107
  // src/types/workflows.ts
@@ -384,8 +384,8 @@ function buildSqlOrderBy(sort, existingColumns, numericFields, dialect) {
384
384
  return `${dialect.quoteIdent(field)} ${direction}`;
385
385
  }
386
386
  const extracted = dialect.jsonExtract(field);
387
- const expr = numericFields.has(field) ? dialect.castNumeric(extracted) : extracted;
388
- return `${expr} ${direction}`;
387
+ const expr2 = numericFields.has(field) ? dialect.castNumeric(extracted) : extracted;
388
+ return `${expr2} ${direction}`;
389
389
  }).join(", ");
390
390
  }
391
391
 
@@ -424,12 +424,12 @@ var MatchBuilder = class {
424
424
  */
425
425
  otherwise(fallback = "null") {
426
426
  if (this.branches.length === 0) return formatJexlValue(fallback);
427
- let expr = formatJexlValue(fallback);
427
+ let expr2 = formatJexlValue(fallback);
428
428
  for (let i = this.branches.length - 1; i >= 0; i--) {
429
429
  const b = this.branches[i];
430
- expr = `${b.condition} ? ${formatJexlValue(b.value)} : ${expr}`;
430
+ expr2 = `${b.condition} ? ${formatJexlValue(b.value)} : ${expr2}`;
431
431
  }
432
- return expr;
432
+ return expr2;
433
433
  }
434
434
  };
435
435
  var FieldConditionBuilder = class {
@@ -487,6 +487,12 @@ var FieldConditionBuilder = class {
487
487
  isEmpty() {
488
488
  return `${this.field} == null || ${this.field} == ''`;
489
489
  }
490
+ /**
491
+ * Alias for `isEmpty()`.
492
+ */
493
+ empty() {
494
+ return this.isEmpty();
495
+ }
490
496
  /**
491
497
  * Numerical greater than (`field > num`).
492
498
  */
@@ -547,20 +553,44 @@ var FieldConditionBuilder = class {
547
553
  hasLengthAtLeast(length2) {
548
554
  return `length(${this.field}) >= ${length2}`;
549
555
  }
556
+ /**
557
+ * Generates a JEXL `slugify(field)` transform expression.
558
+ */
559
+ slugify() {
560
+ return `slugify(${this.field})`;
561
+ }
562
+ /**
563
+ * Generates a JEXL `lower(field)` transform expression.
564
+ */
565
+ lower() {
566
+ return `lower(${this.field})`;
567
+ }
568
+ /**
569
+ * Generates a JEXL `upper(field)` transform expression.
570
+ */
571
+ upper() {
572
+ return `upper(${this.field})`;
573
+ }
574
+ /**
575
+ * Generates a JEXL `trim(field)` transform expression.
576
+ */
577
+ trim() {
578
+ return `trim(${this.field})`;
579
+ }
550
580
  };
551
- function createWhen() {
552
- const whenFn = ((fieldName) => new FieldConditionBuilder(fieldName));
553
- whenFn.user = (userProp) => new FieldConditionBuilder(`user.${userProp}`);
554
- whenFn.sibling = (siblingProp) => new FieldConditionBuilder(`siblingData.${siblingProp}`);
555
- whenFn.concat = (...parts) => {
581
+ function createExpr() {
582
+ const exprFn = ((fieldName) => new FieldConditionBuilder(fieldName));
583
+ exprFn.user = (userProp) => new FieldConditionBuilder(`user.${userProp}`);
584
+ exprFn.sibling = (siblingProp) => new FieldConditionBuilder(`siblingData.${siblingProp}`);
585
+ exprFn.concat = (...parts) => {
556
586
  if (parts.length === 0) return "''";
557
587
  return parts.map((p) => formatJexlValue(p)).join(" + ");
558
588
  };
559
- whenFn.slugify = (field) => `slugify(${field})`;
560
- whenFn.lower = (field) => `lower(${field})`;
561
- whenFn.upper = (field) => `upper(${field})`;
562
- whenFn.trim = (field) => `trim(${field})`;
563
- whenFn.access = {
589
+ exprFn.slugify = (field) => `slugify(${field})`;
590
+ exprFn.lower = (field) => `lower(${field})`;
591
+ exprFn.upper = (field) => `upper(${field})`;
592
+ exprFn.trim = (field) => `trim(${field})`;
593
+ exprFn.access = {
564
594
  isOwner: (ownerField = "author") => {
565
595
  return `${ownerField} == user.id || ${ownerField}.id == user.id`;
566
596
  },
@@ -568,17 +598,18 @@ function createWhen() {
568
598
  return "user.role == 'admin' || (user.roles != null && 'admin' in user.roles)";
569
599
  },
570
600
  hasRole: (...roles) => {
571
- return whenFn.userRole(...roles);
601
+ return exprFn.userRole(...roles);
572
602
  },
573
603
  isPublishedOrAdmin: (statusField = "status") => {
574
604
  return `${statusField} == 'published' || user.role == 'admin' || (user.roles != null && 'admin' in user.roles)`;
575
605
  }
576
606
  };
577
- whenFn.then = (condition, ifTrue, ifFalse = "null") => {
607
+ exprFn.ifElse = (condition, ifTrue, ifFalse = "null") => {
578
608
  return `${condition} ? ${formatJexlValue(ifTrue)} : ${formatJexlValue(ifFalse)}`;
579
609
  };
580
- whenFn.match = () => new MatchBuilder();
581
- whenFn.cases = (...branches) => {
610
+ exprFn.then = exprFn.ifElse;
611
+ exprFn.match = () => new MatchBuilder();
612
+ exprFn.cases = (...branches) => {
582
613
  const builder = new MatchBuilder();
583
614
  let fallback = "null";
584
615
  for (const b of branches) {
@@ -590,114 +621,130 @@ function createWhen() {
590
621
  }
591
622
  return builder.otherwise(fallback);
592
623
  };
593
- whenFn.all = (...conditions) => {
624
+ exprFn.all = (...conditions) => {
594
625
  const valid = conditions.filter(Boolean);
595
626
  if (valid.length === 0) return "true";
596
627
  if (valid.length === 1) return valid[0];
597
628
  return valid.map((c) => c.includes(" ") ? `(${c})` : c).join(" && ");
598
629
  };
599
- whenFn.and = whenFn.all;
600
- whenFn.any = (...conditions) => {
630
+ exprFn.and = exprFn.all;
631
+ exprFn.any = (...conditions) => {
601
632
  const valid = conditions.filter(Boolean);
602
633
  if (valid.length === 0) return "true";
603
634
  if (valid.length === 1) return valid[0];
604
635
  return valid.map((c) => c.includes(" ") ? `(${c})` : c).join(" || ");
605
636
  };
606
- whenFn.or = whenFn.any;
607
- whenFn.not = (condition) => {
637
+ exprFn.or = exprFn.any;
638
+ exprFn.not = (condition) => {
608
639
  if (!condition) return "false";
609
640
  return `!(${condition})`;
610
641
  };
611
- whenFn.variant = (...variants) => {
642
+ exprFn.variant = (...variants) => {
612
643
  const flat = variants.flat();
613
644
  if (flat.length === 0) return "true";
614
645
  if (flat.length === 1) return `variant == '${flat[0]}'`;
615
646
  return `variant in [${flat.map((v) => `'${v}'`).join(", ")}]`;
616
647
  };
617
- whenFn.notVariant = (...variants) => {
648
+ exprFn.notVariant = (...variants) => {
618
649
  const flat = variants.flat();
619
650
  if (flat.length === 0) return "false";
620
651
  if (flat.length === 1) return `variant != '${flat[0]}'`;
621
652
  return `!(variant in [${flat.map((v) => `'${v}'`).join(", ")}])`;
622
653
  };
623
- whenFn.block = (...blocks) => {
654
+ exprFn.block = (...blocks) => {
624
655
  const flat = blocks.flat();
625
656
  if (flat.length === 0) return "true";
626
657
  if (flat.length === 1) return `block == '${flat[0]}'`;
627
658
  return `block in [${flat.map((b) => `'${b}'`).join(", ")}]`;
628
659
  };
629
- whenFn.notBlock = (...blocks) => {
660
+ exprFn.notBlock = (...blocks) => {
630
661
  const flat = blocks.flat();
631
662
  if (flat.length === 0) return "false";
632
663
  if (flat.length === 1) return `block != '${flat[0]}'`;
633
664
  return `!(block in [${flat.map((b) => `'${b}'`).join(", ")}])`;
634
665
  };
635
- whenFn.fieldEquals = (field, value) => {
666
+ exprFn.equals = (field, value) => {
636
667
  return `${field} == ${JSON.stringify(value)}`;
637
668
  };
638
- whenFn.fieldNotEquals = (field, value) => {
669
+ exprFn.fieldEquals = exprFn.equals;
670
+ exprFn.notEquals = (field, value) => {
639
671
  return `${field} != ${JSON.stringify(value)}`;
640
672
  };
641
- whenFn.fieldIn = (field, ...values) => {
673
+ exprFn.fieldNotEquals = exprFn.notEquals;
674
+ exprFn.in = (field, ...values) => {
642
675
  const flat = values.flat();
643
676
  return `${field} in [${flat.map((v) => JSON.stringify(v)).join(", ")}]`;
644
677
  };
645
- whenFn.fieldNotIn = (field, ...values) => {
678
+ exprFn.fieldIn = exprFn.in;
679
+ exprFn.notIn = (field, ...values) => {
646
680
  const flat = values.flat();
647
681
  return `!(${field} in [${flat.map((v) => JSON.stringify(v)).join(", ")}])`;
648
682
  };
649
- whenFn.fieldNotEmpty = (field) => {
683
+ exprFn.fieldNotIn = exprFn.notIn;
684
+ exprFn.notEmpty = (field) => {
650
685
  return `${field} != null && ${field} != ''`;
651
686
  };
652
- whenFn.fieldEmpty = (field) => {
687
+ exprFn.fieldNotEmpty = exprFn.notEmpty;
688
+ exprFn.empty = (field) => {
653
689
  return `${field} == null || ${field} == ''`;
654
690
  };
655
- whenFn.fieldIsTrue = (field) => {
691
+ exprFn.fieldEmpty = exprFn.empty;
692
+ exprFn.isTrue = (field) => {
656
693
  return `${field} == true`;
657
694
  };
658
- whenFn.fieldIsFalse = (field) => {
695
+ exprFn.fieldIsTrue = exprFn.isTrue;
696
+ exprFn.isFalse = (field) => {
659
697
  return `${field} != true`;
660
698
  };
661
- whenFn.fieldGreaterThan = (field, value) => {
699
+ exprFn.fieldIsFalse = exprFn.isFalse;
700
+ exprFn.greaterThan = (field, value) => {
662
701
  return `${field} > ${value}`;
663
702
  };
664
- whenFn.fieldGreaterThanOrEqual = (field, value) => {
703
+ exprFn.fieldGreaterThan = exprFn.greaterThan;
704
+ exprFn.greaterThanOrEqual = (field, value) => {
665
705
  return `${field} >= ${value}`;
666
706
  };
667
- whenFn.fieldLessThan = (field, value) => {
707
+ exprFn.fieldGreaterThanOrEqual = exprFn.greaterThanOrEqual;
708
+ exprFn.lessThan = (field, value) => {
668
709
  return `${field} < ${value}`;
669
710
  };
670
- whenFn.fieldLessThanOrEqual = (field, value) => {
711
+ exprFn.fieldLessThan = exprFn.lessThan;
712
+ exprFn.lessThanOrEqual = (field, value) => {
671
713
  return `${field} <= ${value}`;
672
714
  };
673
- whenFn.fieldBetween = (field, min2, max2) => {
715
+ exprFn.fieldLessThanOrEqual = exprFn.lessThanOrEqual;
716
+ exprFn.between = (field, min2, max2) => {
674
717
  return `${field} >= ${min2} && ${field} <= ${max2}`;
675
718
  };
676
- whenFn.fieldStartsWith = (field, prefix) => {
719
+ exprFn.fieldBetween = exprFn.between;
720
+ exprFn.startsWith = (field, prefix) => {
677
721
  return `startsWith(${field}, ${JSON.stringify(prefix)})`;
678
722
  };
679
- whenFn.fieldEndsWith = (field, suffix) => {
723
+ exprFn.fieldStartsWith = exprFn.startsWith;
724
+ exprFn.endsWith = (field, suffix) => {
680
725
  return `endsWith(${field}, ${JSON.stringify(suffix)})`;
681
726
  };
682
- whenFn.fieldContains = (field, item) => {
727
+ exprFn.fieldEndsWith = exprFn.endsWith;
728
+ exprFn.contains = (field, item) => {
683
729
  return `includes(${field}, ${JSON.stringify(item)})`;
684
730
  };
685
- whenFn.arrayNotEmpty = (field) => {
731
+ exprFn.fieldContains = exprFn.contains;
732
+ exprFn.arrayNotEmpty = (field) => {
686
733
  return `length(${field}) > 0`;
687
734
  };
688
- whenFn.arrayEmpty = (field) => {
735
+ exprFn.arrayEmpty = (field) => {
689
736
  return `length(${field}) == 0`;
690
737
  };
691
- whenFn.arrayCountGreaterThan = (field, count2) => {
738
+ exprFn.arrayCountGreaterThan = (field, count2) => {
692
739
  return `length(${field}) > ${count2}`;
693
740
  };
694
- whenFn.arrayCountAtLeast = (field, count2) => {
741
+ exprFn.arrayCountAtLeast = (field, count2) => {
695
742
  return `length(${field}) >= ${count2}`;
696
743
  };
697
- whenFn.arrayCountLessThan = (field, count2) => {
744
+ exprFn.arrayCountLessThan = (field, count2) => {
698
745
  return `length(${field}) < ${count2}`;
699
746
  };
700
- whenFn.userRole = (...roles) => {
747
+ exprFn.userRole = (...roles) => {
701
748
  const flat = roles.flat();
702
749
  if (flat.length === 1) {
703
750
  return `user.role == '${flat[0]}' || (user.roles != null && '${flat[0]}' in user.roles)`;
@@ -705,29 +752,30 @@ function createWhen() {
705
752
  const roleArray = `[${flat.map((r) => `'${r}'`).join(", ")}]`;
706
753
  return `user.role in ${roleArray} || (user.roles != null && includes(${roleArray}, user.role))`;
707
754
  };
708
- whenFn.userEmailDomain = (domain) => {
755
+ exprFn.userEmailDomain = (domain) => {
709
756
  const clean = domain.startsWith("@") ? domain : `@${domain}`;
710
757
  return `endsWith(user.email, '${clean}')`;
711
758
  };
712
- whenFn.userAttributeEquals = (attr, value) => {
759
+ exprFn.userAttributeEquals = (attr, value) => {
713
760
  return `user.${attr} == ${JSON.stringify(value)}`;
714
761
  };
715
- whenFn.isNewDocument = () => {
762
+ exprFn.isNewDocument = () => {
716
763
  return "id == null";
717
764
  };
718
- whenFn.isExistingDocument = () => {
765
+ exprFn.isExistingDocument = () => {
719
766
  return "id != null";
720
767
  };
721
- whenFn.statusEquals = (status) => {
768
+ exprFn.statusEquals = (status) => {
722
769
  return `status == '${status}'`;
723
770
  };
724
- whenFn.statusIn = (...statuses) => {
771
+ exprFn.statusIn = (...statuses) => {
725
772
  const flat = statuses.flat();
726
773
  return `status in [${flat.map((s) => `'${s}'`).join(", ")}]`;
727
774
  };
728
- return whenFn;
775
+ return exprFn;
729
776
  }
730
- var when = createWhen();
777
+ var expr = createExpr();
778
+ var when = expr;
731
779
 
732
780
  // src/index.ts
733
781
  function defineCollection(config) {
@@ -860,6 +908,7 @@ export {
860
908
  evaluateJexlSync,
861
909
  executeFieldAfterRead,
862
910
  executeFieldBeforeChange,
911
+ expr,
863
912
  first,
864
913
  floor,
865
914
  formatConfigDiagnostics,