From dc84d097323f33648f10cb96b8582179594e1ea5 Mon Sep 17 00:00:00 2001
From: chris48s <chris48s@users.noreply.github.com>
Date: Sat, 13 Jan 2024 18:24:18 +0000
Subject: [PATCH] sort categories by title (except core) (#9888)

---
 core/base-service/openapi.js      | 14 ++++++++++----
 core/base-service/openapi.spec.js | 11 +++++++----
 scripts/export-openapi-cli.js     |  8 ++++++--
 3 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/core/base-service/openapi.js b/core/base-service/openapi.js
index d87302a94f..d61991c548 100644
--- a/core/base-service/openapi.js
+++ b/core/base-service/openapi.js
@@ -198,7 +198,13 @@ function addGlobalProperties(endpoints) {
   return paths
 }
 
-function services2openapi(services) {
+function sortPaths(obj) {
+  const entries = Object.entries(obj)
+  entries.sort((a, b) => a[1].get.summary.localeCompare(b[1].get.summary))
+  return Object.fromEntries(entries)
+}
+
+function services2openapi(services, sort) {
   const paths = {}
   for (const service of services) {
     if (service.openApi) {
@@ -221,10 +227,10 @@ function services2openapi(services) {
       }
     }
   }
-  return paths
+  return sort ? sortPaths(paths) : paths
 }
 
-function category2openapi(category, services) {
+function category2openapi({ category, services, sort = false }) {
   const spec = {
     openapi: '3.0.0',
     info: {
@@ -334,7 +340,7 @@ function category2openapi(category, services) {
         },
       },
     },
-    paths: services2openapi(services),
+    paths: services2openapi(services, sort),
   }
 
   return spec
diff --git a/core/base-service/openapi.spec.js b/core/base-service/openapi.spec.js
index 1ed1c1e9da..35bfa563b6 100644
--- a/core/base-service/openapi.spec.js
+++ b/core/base-service/openapi.spec.js
@@ -377,10 +377,13 @@ describe('category2openapi', function () {
   it('generates an Open API spec', function () {
     expect(
       clean(
-        category2openapi({ name: 'build' }, [
-          OpenApiService.getDefinition(),
-          LegacyService.getDefinition(),
-        ]),
+        category2openapi({
+          category: { name: 'build' },
+          services: [
+            OpenApiService.getDefinition(),
+            LegacyService.getDefinition(),
+          ],
+        }),
       ),
     ).to.deep.equal(expected)
   })
diff --git a/scripts/export-openapi-cli.js b/scripts/export-openapi-cli.js
index f35bc04940..0a1beb8bfa 100644
--- a/scripts/export-openapi-cli.js
+++ b/scripts/export-openapi-cli.js
@@ -27,7 +27,7 @@ function writeSpec(filename, spec) {
 
     writeSpec(
       path.join(specsPath, `${category.id}.yaml`),
-      category2openapi(category, services),
+      category2openapi({ category, services, sort: true }),
     )
   }
 
@@ -44,6 +44,10 @@ function writeSpec(filename, spec) {
   )
   writeSpec(
     path.join(specsPath, '1core.yaml'),
-    category2openapi({ name: 'Core' }, coreServices),
+    category2openapi({
+      category: { name: 'Core' },
+      services: coreServices,
+      sort: false,
+    }),
   )
 })()
-- 
GitLab