Skip to content

Commit

Permalink
o2k: reorder object members to prettify the yaml output
Browse files Browse the repository at this point in the history
  • Loading branch information
Tieske committed Apr 29, 2021
1 parent bdb4b4e commit 67dd491
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 6 deletions.
58 changes: 58 additions & 0 deletions packages/openapi-2-kong/src/common.js
Expand Up @@ -170,3 +170,61 @@ export function distinctByProperty<T>(arr: Array<T>, propertySelector: (item: T)
}
return result;
}

function reorderObjectMembers(
objIn: any,
objOut: any,
first: Array<string>,
last: Array<string>,
): any {
first.forEach(propName => {
if (typeof objIn[propName] !== 'undefined') {
objOut[propName] = objIn[propName];
}
});

for (const [propName, value] of Object.entries(objIn)) {
if (typeof objOut[propName] === 'undefined' && !last.includes(propName)) {
objOut[propName] = value;
}
}

last.forEach(propName => {
if (typeof objIn[propName] !== 'undefined') {
objOut[propName] = objIn[propName];
}
});
return objOut;
}

export function reorderService(service: DCService): DCService {
const first: Array<string> = ['name', 'protocol', 'host', 'port', 'path'];
const last: Array<string> = ['tags', 'plugins', 'routes'];
const serviceOut: DCService = {};
return reorderObjectMembers(service, serviceOut, first, last);
}

export function reorderUpstream(upstream: DCUpstream): DCUpstream {
const first: Array<string> = ['name'];
const last: Array<string> = ['tags', 'targets'];
const upstreamOut: DCUpstream = {};
return reorderObjectMembers(upstream, upstreamOut, first, last);
}

export function reorderRoute(route: DCRoute): DCRoute {
const first: Array<string> = ['name', 'paths', 'methods'];
const last: Array<string> = ['tags', 'plugins'];
const routeOut: DCRoute = {};
return reorderObjectMembers(route, routeOut, first, last);
}

export function reorderPlugins(plugins: Array<DCPlugin>): Array<DCPlugin> {
const first: Array<string> = ['name'];
const last: Array<string> = ['tags', 'config'];
const pluginsOut: Array<DCPlugin> = [];
plugins.forEach(plugin => {
const pluginOut: DCPlugin = {};
pluginsOut.push(reorderObjectMembers(plugin, pluginOut, first, last));
});
return pluginsOut;
}
11 changes: 7 additions & 4 deletions packages/openapi-2-kong/src/declarative-config/services.js
Expand Up @@ -8,6 +8,9 @@ import {
pathVariablesToRegex,
HttpMethod,
parseUrl,
reorderService,
reorderRoute,
reorderPlugins,
} from '../common';

import { generateSecurityPlugins } from './security-plugins';
Expand Down Expand Up @@ -58,7 +61,7 @@ export function generateService(
host: name, // not a hostname, but the Upstream name
port: Number(parsedUrl.port || '80'),
path: parsedUrl.pathname,
plugins: globalPlugins.plugins,
plugins: reorderPlugins(globalPlugins.plugins),
routes: [],
tags,
};
Expand Down Expand Up @@ -139,14 +142,14 @@ export function generateService(

// Add plugins if there are any
if (plugins.length) {
route.plugins = plugins;
route.plugins = reorderPlugins(plugins);
}

service.routes.push(route);
service.routes.push(reorderRoute(route));
}
}

return service;
return reorderService(service);
}

export function generateRouteName(
Expand Down
4 changes: 2 additions & 2 deletions packages/openapi-2-kong/src/declarative-config/upstreams.js
@@ -1,6 +1,6 @@
// @flow

import { getName, parseUrl, fillServerVariables } from '../common';
import { getName, parseUrl, fillServerVariables, reorderUpstream } from '../common';

export function generateUpstreams(api: OpenApi3Spec, tags: Array<string>) {
const servers = api.servers || [];
Expand Down Expand Up @@ -37,5 +37,5 @@ export function generateUpstreams(api: OpenApi3Spec, tags: Array<string>) {
}
}

return [upstream];
return [reorderUpstream(upstream)];
}

0 comments on commit 67dd491

Please sign in to comment.