@tsed/platform-http
Version:
A TypeScript Framework on top of Express
45 lines (44 loc) • 1.71 kB
JavaScript
import "./PlatformConfiguration.js";
import { Env, isBoolean, Store } from "@tsed/core";
import { configuration, mergeMount, ProviderScope, ProviderType } from "@tsed/di";
import { $on } from "@tsed/hooks";
import { JsonMapperSettings } from "@tsed/json-mapper";
export function defineConfiguration(input = {}) {
if (input.$$resolved) {
return input;
}
const store = input.rootModule ? Store.from(input.rootModule).get("configuration") || {} : {};
const env = input.env || store.env || process.env.NODE_ENV || Env.DEV;
const finalConfig = {
$$resolved: true,
rootDir: process.cwd(),
env,
httpPort: 8080,
httpsPort: false,
jsonMapper: JsonMapperSettings,
...store,
...input,
scopes: {
[ProviderType.CONTROLLER]: ProviderScope.SINGLETON,
...store.scopes,
...input.scopes
},
mount: mergeMount(store.mount, input.mount),
logger: {
debug: false,
level: env === Env.TEST ? "off" : "info",
logRequest: true,
...store.logger,
...input.logger,
jsonIndentation: process.env.NODE_ENV === Env.PROD ? 0 : 2
}
};
configuration().set(finalConfig);
return finalConfig;
}
$on("$alterConfig:jsonMapper", (options) => {
JsonMapperSettings.strictGroups = Boolean(options.strictGroups);
JsonMapperSettings.disableUnsecureConstructor = Boolean(options.disableUnsecureConstructor);
JsonMapperSettings.additionalProperties = Boolean(isBoolean(options.additionalProperties) ? options.additionalProperties : options.additionalProperties === "accept");
return options;
});