{"version":3,"file":"ProjectContainer.cjs","sources":["../../../../../packages/engine-http/src/project/ProjectContainer.ts"],"sourcesContent":["import { Builder } from '@contember/dic'\nimport { Connection, DatabaseMetadataResolver } from '@contember/database'\nimport {\n\tDatabaseContext,\n\tDatabaseContextFactory,\n\tProjectInitializer,\n\tSchemaProvider,\n\tStageCreator,\n\tSystemMigrationsRunner,\n} from '@contember/engine-system-api'\nimport { GraphQlSchemaBuilderFactory, PermissionFactory } from '@contember/engine-content-api'\nimport { Logger } from '@contember/logger'\nimport { ProjectConfig } from './config'\nimport { ContentSchemaResolver } from '../content'\nimport { Providers } from '../providers'\nimport { Plugin } from '../plugin/Plugin'\nimport { ServerConfig } from '../config/config'\nimport { ProjectDatabaseMetadataResolver } from './ProjectDatabaseMetadataResolver'\n\nexport interface ProjectContainer {\n\tsystemDatabaseContextFactory: DatabaseContextFactory\n\tsystemDatabaseContext: DatabaseContext\n\tsystemReadDatabaseContext: DatabaseContext\n\tproject: ProjectConfig\n\tlogger: Logger\n\tconnection: Connection\n\treadConnection: Connection\n\tcontentSchemaResolver: ContentSchemaResolver\n\tprojectInitializer: ProjectInitializer\n\tprojectDatabaseMetadataResolver: ProjectDatabaseMetadataResolver\n}\n\nexport class ProjectContainerFactoryFactory {\n\tconstructor(\n\t\tprivate readonly plugins: Plugin[],\n\t\tprivate readonly providers: Providers,\n\t\tprivate readonly databaseMetadataResolver: DatabaseMetadataResolver,\n\t) {\n\t}\n\n\tcreate(schemaProvider: SchemaProvider, logger: Logger): ProjectContainerFactory {\n\t\treturn new ProjectContainerFactory(\n\t\t\tthis.plugins,\n\t\t\tschemaProvider,\n\t\t\tthis.providers,\n\t\t\tlogger,\n\t\t\tthis.databaseMetadataResolver,\n\t\t)\n\t}\n}\n\ninterface ProjectContainerFactoryArgs {\n\tproject: ProjectConfig\n}\n\nexport class ProjectContainerFactory {\n\tconstructor(\n\t\tprivate readonly plugins: Plugin<any>[],\n\t\tprivate readonly schemaProvider: SchemaProvider,\n\t\tprivate readonly providers: Providers,\n\t\tprivate readonly logger: Logger,\n\t\tprivate readonly databaseMetadataResolver: DatabaseMetadataResolver,\n\t) {}\n\n\tpublic createContainer(args: ProjectContainerFactoryArgs): ProjectContainer {\n\t\treturn this.createBuilder(args)\n\t\t\t.build()\n\t\t\t.pick(\n\t\t\t\t'project',\n\t\t\t\t'connection',\n\t\t\t\t'readConnection',\n\t\t\t\t'systemDatabaseContextFactory',\n\t\t\t\t'systemDatabaseContext',\n\t\t\t\t'systemReadDatabaseContext',\n\t\t\t\t'contentSchemaResolver',\n\t\t\t\t'projectInitializer',\n\t\t\t\t'logger',\n\t\t\t\t'projectDatabaseMetadataResolver',\n\t\t\t)\n\t}\n\n\tprotected createBuilder({ project }: ProjectContainerFactoryArgs) {\n\t\treturn new Builder({})\n\t\t\t.addService('logger', () =>\n\t\t\t\tthis.logger.child({ project: project.slug }))\n\t\t\t.addService('project', () =>\n\t\t\t\tproject)\n\t\t\t.addService('connection', ({ project, logger }) =>\n\t\t\t\tConnection.create(project.db, err => logger.error(err)))\n\t\t\t.addService('readConnection', ({ project, logger, connection }) => {\n\t\t\t\tif (!project.db.read) {\n\t\t\t\t\treturn connection\n\t\t\t\t}\n\t\t\t\treturn Connection.create({\n\t\t\t\t\t...project.db,\n\t\t\t\t\t...project.db.read,\n\t\t\t\t\tpool: {\n\t\t\t\t\t\t...project.db.pool,\n\t\t\t\t\t\t...project.db.read.pool,\n\t\t\t\t\t},\n\t\t\t\t}, err => logger.error(err))\n\t\t\t})\n\n\n\t\t\t.addService('contentSchemaResolver', () =>\n\t\t\t\tnew ContentSchemaResolver(this.schemaProvider))\n\t\t\t.addService('systemSchemaName', ({ project }) =>\n\t\t\t\tproject.db.systemSchema ?? 'system')\n\t\t\t.addService('systemDatabaseContextFactory', ({ systemSchemaName }) =>\n\t\t\t\tnew DatabaseContextFactory(systemSchemaName, this.providers))\n\t\t\t.addService('systemDatabaseContext', ({ connection, systemDatabaseContextFactory }) =>\n\t\t\t\tsystemDatabaseContextFactory.create(connection))\n\t\t\t.addService('systemReadDatabaseContext', ({ readConnection, systemDatabaseContextFactory }) =>\n\t\t\t\tsystemDatabaseContextFactory.create(readConnection))\n\t\t\t.addService('systemMigrationGroups', () =>\n\t\t\t\tObject.fromEntries(this.plugins.flatMap(it => it.getSystemMigrations ? [[it.name, it.getSystemMigrations()]] : [])))\n\t\t\t.addService('systemMigrationsRunner', ({ systemDatabaseContextFactory, project, systemSchemaName, systemMigrationGroups }) =>\n\t\t\t\tnew SystemMigrationsRunner(systemDatabaseContextFactory, { ...project, systemSchema: systemSchemaName }, this.schemaProvider, systemMigrationGroups, this.databaseMetadataResolver))\n\t\t\t.addService('projectInitializer', ({ systemMigrationsRunner, systemDatabaseContext, project, systemSchemaName }) =>\n\t\t\t\tnew ProjectInitializer(new StageCreator(), systemMigrationsRunner, systemDatabaseContext, { ...project, systemSchema: systemSchemaName }))\n\t\t\t.addService('projectDatabaseMetadataResolver', () =>\n\t\t\t\tnew ProjectDatabaseMetadataResolver(this.databaseMetadataResolver))\n\t}\n}\n"],"names":["Builder","project","Connection","ContentSchemaResolver","DatabaseContextFactory","SystemMigrationsRunner","ProjectInitializer","StageCreator","ProjectDatabaseMetadataResolver"],"mappings":"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"}