{"version":3,"file":"projectConfigResolver.cjs","sources":["../../../../../packages/engine-http/src/config/projectConfigResolver.ts"],"sourcesContent":["import { Merger, ParametersResolver, resolveParameters, UndefinedParameterError } from '@contember/config-loader'\nimport * as Typesafe from '@contember/typesafe'\nimport { projectConfigSchema } from './configSchema'\nimport { TenantConfig } from './config'\nimport { ProjectConfig, ProjectSecrets } from '../project/config'\nimport { ConfigProcessor } from './ConfigProcessor'\n\nexport type ProjectConfigResolver = (\n\tslug: string,\n\tadditionalConfig: any,\n\tsecrets: ProjectSecrets,\n\ttenantConfig: TenantConfig,\n) => ProjectConfig\n\ntype Env = Record<string, string>\n\nexport const createProjectConfigResolver = (env: Env, config: any, configProcessors: ConfigProcessor<any>[]): ProjectConfigResolver =>\n\t(slug, additionalConfig, secrets, tenantConfig): ProjectConfig => {\n\t\tconst mergedConfig = Merger.merge(\n\t\t\tconfig.projectDefaults as any,\n\t\t\t(config?.projects as any)?.[slug] as any,\n\t\t\tadditionalConfig,\n\t\t)\n\t\tconst resolvedConfig = resolveParameters(mergedConfig, createProjectParametersResolver(slug, env, secrets))\n\n\t\tif (!resolvedConfig.stages) {\n\t\t\tresolvedConfig.stages = { [resolvedConfig.stageSlug ?? 'live']: {} }\n\t\t}\n\n\t\tconst projectConfigSchemaWithPlugins = configProcessors.reduce(\n\t\t\t(schema, current) => {\n\t\t\t\tif (!current.getProjectConfigSchema) {\n\t\t\t\t\treturn schema\n\t\t\t\t}\n\t\t\t\treturn Typesafe.intersection(schema, current.getProjectConfigSchema(slug))\n\t\t\t},\n\t\t\tprojectConfigSchema,\n\t\t)\n\t\tconst projectConfig = projectConfigSchemaWithPlugins(resolvedConfig, ['project', slug])\n\t\tif (!('host' in projectConfig.db)) {\n\t\t\treturn {\n\t\t\t\t...projectConfig,\n\t\t\t\tdb: {\n\t\t\t\t\t...tenantConfig.db,\n\t\t\t\t\t...projectConfig.db,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...projectConfig,\n\t\t\tdb: projectConfig.db,\n\t\t}\n\t}\n\n\nconst createProjectParametersResolver = (slug: string, env: Env, secrets: ProjectSecrets): ParametersResolver =>\n\tparts => {\n\t\tif (parts[0] === 'project') {\n\t\t\tif (parts[1] === 'env') {\n\t\t\t\tconst envName = parts[2]\n\t\t\t\tconst projectEnvName = projectNameToEnvName(slug)\n\t\t\t\tconst envValue = env[projectEnvName + '_' + envName] || env['DEFAULT_' + envName]\n\t\t\t\tif (envValue === undefined) {\n\t\t\t\t\tthrow new UndefinedParameterError(`ENV variable \"${projectEnvName + '_' + envName}\" not found.`)\n\t\t\t\t}\n\t\t\t\treturn envValue\n\t\t\t} else if (parts[1] === 'slug') {\n\t\t\t\treturn slug\n\t\t\t} else if (parts[1] === 'secret') {\n\t\t\t\tconst key = parts.slice(2).join('.')\n\t\t\t\tconst value = secrets[key]\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tthrow new UndefinedParameterError(`Project secret ${parts[2]} not found`)\n\t\t\t\t}\n\t\t\t\treturn value\n\t\t\t}\n\t\t}\n\t\tthrow new UndefinedParameterError(`Parameter \"${parts.join('.')}\" not found.`)\n\t}\n\nconst projectNameToEnvName = (projectName: string): string => {\n\tconst envName = projectName.toUpperCase().replace(/-/g, '_')\n\tif (envName === 'TENANT') {\n\t\tthrow new Error('Forbidden project name')\n\t}\n\treturn envName\n}\n"],"names":["Merger","resolveParameters","Typesafe","projectConfigSchema","UndefinedParameterError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBa,MAAA,8BAA8B,CAAC,KAAU,QAAa,qBAClE,CAAC,MAAM,kBAAkB,SAAS,iBAAgC;AACjE,QAAM,eAAeA,aAAAA,OAAO;AAAA,IAC3B,OAAO;AAAA,IACN,QAAQ,WAAmB,IAAI;AAAA,IAChC;AAAA,EACD;AACA,QAAM,iBAAiBC,aAAAA,kBAAkB,cAAc,gCAAgC,MAAM,KAAK,OAAO,CAAC;AAEtG,MAAA,CAAC,eAAe,QAAQ;AACZ,mBAAA,SAAS,EAAE,CAAC,eAAe,aAAa,MAAM,GAAG,GAAG;AAAA,EAAA;AAGpE,QAAM,iCAAiC,iBAAiB;AAAA,IACvD,CAAC,QAAQ,YAAY;AAChB,UAAA,CAAC,QAAQ,wBAAwB;AAC7B,eAAA;AAAA,MAAA;AAER,aAAOC,oBAAS,aAAa,QAAQ,QAAQ,uBAAuB,IAAI,CAAC;AAAA,IAC1E;AAAA,IACAC,aAAAA;AAAAA,EACD;AACA,QAAM,gBAAgB,+BAA+B,gBAAgB,CAAC,WAAW,IAAI,CAAC;AAClF,MAAA,EAAE,UAAU,cAAc,KAAK;AAC3B,WAAA;AAAA,MACN,GAAG;AAAA,MACH,IAAI;AAAA,QACH,GAAG,aAAa;AAAA,QAChB,GAAG,cAAc;AAAA,MAAA;AAAA,IAEnB;AAAA,EAAA;AAEM,SAAA;AAAA,IACN,GAAG;AAAA,IACH,IAAI,cAAc;AAAA,EACnB;AACD;AAGD,MAAM,kCAAkC,CAAC,MAAc,KAAU,YAChE,CAAS,UAAA;AACJ,MAAA,MAAM,CAAC,MAAM,WAAW;AACvB,QAAA,MAAM,CAAC,MAAM,OAAO;AACjB,YAAA,UAAU,MAAM,CAAC;AACjB,YAAA,iBAAiB,qBAAqB,IAAI;AAC1C,YAAA,WAAW,IAAI,iBAAiB,MAAM,OAAO,KAAK,IAAI,aAAa,OAAO;AAChF,UAAI,aAAa,QAAW;AAC3B,cAAM,IAAIC,aAAwB,wBAAA,iBAAiB,iBAAiB,MAAM,OAAO,cAAc;AAAA,MAAA;AAEzF,aAAA;AAAA,IACG,WAAA,MAAM,CAAC,MAAM,QAAQ;AACxB,aAAA;AAAA,IACG,WAAA,MAAM,CAAC,MAAM,UAAU;AACjC,YAAM,MAAM,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAC7B,YAAA,QAAQ,QAAQ,GAAG;AACzB,UAAI,UAAU,QAAW;AACxB,cAAM,IAAIA,aAAwB,wBAAA,kBAAkB,MAAM,CAAC,CAAC,YAAY;AAAA,MAAA;AAElE,aAAA;AAAA,IAAA;AAAA,EACR;AAED,QAAM,IAAIA,aAAAA,wBAAwB,cAAc,MAAM,KAAK,GAAG,CAAC,cAAc;AAC9E;AAED,MAAM,uBAAuB,CAAC,gBAAgC;AAC7D,QAAM,UAAU,YAAY,YAAc,EAAA,QAAQ,MAAM,GAAG;AAC3D,MAAI,YAAY,UAAU;AACnB,UAAA,IAAI,MAAM,wBAAwB;AAAA,EAAA;AAElC,SAAA;AACR;;"}