{"version":3,"file":"config.cjs","sources":["../../../../../packages/engine-http/src/config/config.ts"],"sourcesContent":["import { ConfigLoader, createObjectParametersResolver, Merger, resolveParameters } from '@contember/config-loader'\n\nimport { serverConfigSchema as defaultServerConfigSchema, tenantConfigSchema } from './configSchema'\nimport { configTemplate } from './configTemplate'\nimport { createProjectConfigResolver, ProjectConfigResolver } from './projectConfigResolver'\nimport { createTenantConfigResolver, TenantConfigResolver } from './tenantConfigResolver'\nimport { Type } from '@contember/typesafe'\nimport { ConfigProcessor } from './ConfigProcessor'\n\nexport type ServerConfig = ReturnType<typeof defaultServerConfigSchema>\nexport type TenantConfig = ReturnType<typeof tenantConfigSchema>\n\nexport type ConfigSource = { data: string; type: 'file' | 'json' | 'yaml' }\n\nexport type Env = Record<string, string>\n\nexport async function readConfig<T extends ServerConfig>(\n\tconfigSources: ConfigSource[] = [],\n\tconfigProcessors: ConfigProcessor<any>[] = [],\n\tserverConfigSchema: Type<T> = defaultServerConfigSchema as Type<T>,\n): Promise<{\n\tserverConfig: T\n\tprojectConfigResolver: ProjectConfigResolver\n\ttenantConfigResolver: TenantConfigResolver\n}> {\n\tconst loader = new ConfigLoader()\n\tconst configs = await Promise.all(\n\t\tconfigSources.map(it => (it.type === 'file' ? loader.load(it.data) : loader.loadString(it.data, it.type))),\n\t)\n\tconst env: Env = {\n\t\t...configProcessors.reduce((acc, curr) => ({ ...acc, ...(curr.getDefaultEnv?.() || {}) }), {\n\t\t\tDEFAULT_DB_PORT: '5432',\n\t\t}),\n\t\t...Object.fromEntries(Object.entries(process.env).filter((it): it is [string, string] => it[1] !== undefined)),\n\t}\n\n\tconst template = configProcessors.reduce(\n\t\t(tpl, processor) => processor.prepareConfigTemplate?.(tpl, { env }) || tpl,\n\t\tconfigTemplate,\n\t)\n\n\tconst rawConfig = Merger.merge(template, ...configs)\n\n\tconst parametersResolver = createObjectParametersResolver({ env })\n\tconst config = resolveParameters(rawConfig.server, parametersResolver)\n\n\tconst serverConfig = serverConfigSchema(config)\n\treturn {\n\t\tserverConfig,\n\t\tprojectConfigResolver: createProjectConfigResolver(env, rawConfig, configProcessors),\n\t\ttenantConfigResolver: createTenantConfigResolver(env, rawConfig.tenant),\n\t}\n}\n\n\n\n\n"],"names":["defaultServerConfigSchema","ConfigLoader","configTemplate","Merger","createObjectParametersResolver","resolveParameters","createProjectConfigResolver","createTenantConfigResolver"],"mappings":";;;;;;;AAgBsB,eAAA,WACrB,gBAAgC,CAAC,GACjC,mBAA2C,CAAC,GAC5C,qBAA8BA,iCAK5B;AACI,QAAA,SAAS,IAAIC,0BAAa;AAC1B,QAAA,UAAU,MAAM,QAAQ;AAAA,IAC7B,cAAc,IAAI,CAAA,OAAO,GAAG,SAAS,SAAS,OAAO,KAAK,GAAG,IAAI,IAAI,OAAO,WAAW,GAAG,MAAM,GAAG,IAAI,CAAE;AAAA,EAC1G;AACA,QAAM,MAAW;AAAA,IAChB,GAAG,iBAAiB,OAAO,CAAC,KAAK,UAAU,EAAE,GAAG,KAAK,GAAI,KAAK,qBAAqB,CAAA,EAAQ,IAAA;AAAA,MAC1F,iBAAiB;AAAA,IAAA,CACjB;AAAA,IACD,GAAG,OAAO,YAAY,OAAO,QAAQ,QAAQ,GAAG,EAAE,OAAO,CAAC,OAA+B,GAAG,CAAC,MAAM,MAAS,CAAC;AAAA,EAC9G;AAEA,QAAM,WAAW,iBAAiB;AAAA,IACjC,CAAC,KAAK,cAAc,UAAU,wBAAwB,KAAK,EAAE,IAAK,CAAA,KAAK;AAAA,IACvEC,eAAAA;AAAAA,EACD;AAEA,QAAM,YAAYC,aAAA,OAAO,MAAM,UAAU,GAAG,OAAO;AAEnD,QAAM,qBAAqBC,aAAAA,+BAA+B,EAAE,KAAK;AACjE,QAAM,SAASC,aAAA,kBAAkB,UAAU,QAAQ,kBAAkB;AAE/D,QAAA,eAAe,mBAAmB,MAAM;AACvC,SAAA;AAAA,IACN;AAAA,IACA,uBAAuBC,sBAAA,4BAA4B,KAAK,WAAW,gBAAgB;AAAA,IACnF,sBAAsBC,qBAAA,2BAA2B,KAAK,UAAU,MAAM;AAAA,EACvE;AACD;;"}