@tsed/platform-http
Version:
A TypeScript Framework on top of Express
48 lines (47 loc) • 1.38 kB
JavaScript
import { isArray, isClass } from "@tsed/core";
import { GlobalProviders, ProviderType } from "@tsed/di";
const lookupProperties = ["mount", "imports"];
/**
* @ignore
*/
function getTokens(config) {
if (!config) {
return [];
}
if (isArray(config)) {
return config.filter(isClass).map((value) => {
return { token: value };
});
}
return Object.keys(config).reduce((list, route) => {
return [
...list,
...[]
.concat(config[route])
.filter(isClass)
.map((token) => ({
route,
token
}))
];
}, []);
}
/**
* @ignore
*/
function resolveRecursively(providers) {
return providers
.map(({ token }) => GlobalProviders.get(token))
.filter((provider) => provider?.type === ProviderType.MODULE && provider.configuration)
.flatMap((provider) => resolveControllers(provider.configuration));
}
/**
* Return controllers and is base route according to his configuration in module configuration.
*
* @param settings
* @ignore
*/
export function resolveControllers(settings) {
const providers = lookupProperties.flatMap((property) => getTokens(settings[property]));
return [...resolveRecursively(providers), ...providers].filter((provider) => !!provider.route);
}