@boon4681/giri 0.0.3-alpha-4 → 0.0.3-alpha-5

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/cli.js CHANGED
@@ -688,6 +688,42 @@ function urlSegment(segment) {
688
688
  }
689
689
  return { value: segment };
690
690
  }
691
+ function segmentRanks(segments) {
692
+ const ranks = [];
693
+ for (const segment of segments) {
694
+ const converted = urlSegment(segment);
695
+ if (!converted.value) {
696
+ continue;
697
+ }
698
+ if (converted.param?.catchAll) {
699
+ ranks.push({ rank: 2, text: converted.param.name });
700
+ } else if (converted.param) {
701
+ ranks.push({ rank: 1, text: converted.param.name });
702
+ } else {
703
+ ranks.push({ rank: 0, text: converted.value });
704
+ }
705
+ }
706
+ return ranks;
707
+ }
708
+ function compareRoutes(left, right) {
709
+ const leftRanks = segmentRanks(left.routeSegments);
710
+ const rightRanks = segmentRanks(right.routeSegments);
711
+ const shared = Math.min(leftRanks.length, rightRanks.length);
712
+ for (let i = 0; i < shared; i++) {
713
+ const a = leftRanks[i];
714
+ const b = rightRanks[i];
715
+ if (a.rank !== b.rank) {
716
+ return a.rank - b.rank;
717
+ }
718
+ if (a.rank === 0 && a.text !== b.text) {
719
+ return a.text.localeCompare(b.text);
720
+ }
721
+ }
722
+ if (leftRanks.length !== rightRanks.length) {
723
+ return leftRanks.length - rightRanks.length;
724
+ }
725
+ return METHOD_ORDER.indexOf(left.method) - METHOD_ORDER.indexOf(right.method);
726
+ }
691
727
  function pathFromSegments(segments) {
692
728
  const pathSegments = [];
693
729
  const params = [];
@@ -764,13 +800,7 @@ async function scanRoutes(routesDir) {
764
800
  sharedFiles: sharedFilesForDir(routesDir, routeDir, sharedCache)
765
801
  });
766
802
  }
767
- return routes.sort((left, right) => {
768
- const pathOrder = left.path.localeCompare(right.path);
769
- if (pathOrder !== 0) {
770
- return pathOrder;
771
- }
772
- return METHOD_ORDER.indexOf(left.method) - METHOD_ORDER.indexOf(right.method);
773
- });
803
+ return routes.sort(compareRoutes);
774
804
  }
775
805
 
776
806
  // src/types.ts