{"version":3,"file":"GraphQlSchemaFactory.cjs","sources":["../../../../../packages/engine-http/src/content/GraphQlSchemaFactory.ts"],"sourcesContent":["import {\n\tAuthorizator,\n\tContext,\n\tEntityRulesResolver,\n\tGraphQlSchemaBuilderFactory,\n\tIntrospectionSchemaDefinitionFactory,\n\tIntrospectionSchemaFactory,\n\tPermissionFactory,\n} from '@contember/engine-content-api'\nimport { Acl, Schema } from '@contember/schema'\nimport { GraphQLFieldConfig, GraphQLNamedType, GraphQLSchema } from 'graphql'\nimport { GraphQLSchemaContributor } from './GraphQLSchemaContributor'\nimport { Identity } from './Identity'\nimport { ContentApiSpecificCache } from './ContentApiSpecificCache'\nimport { ProjectConfig } from '../project/config'\n\nexport interface GraphQLSchemaFactoryResult {\n\tpermissions: Acl.Permissions\n\tschema: GraphQLSchema\n}\n\nexport class GraphQlSchemaFactory {\n\n\tconstructor(\n\t\tprivate readonly cache: ContentApiSpecificCache<Schema, GraphQLSchemaFactoryResult>,\n\t\tprivate readonly graphqlSchemaBuilderFactory: GraphQlSchemaBuilderFactory,\n\t\tprivate readonly permissionFactory: PermissionFactory,\n\t\tprivate readonly schemaContributors: GraphQLSchemaContributor[],\n\t) {}\n\n\tpublic create(schema: Schema, identity: Identity, project: ProjectConfig): GraphQLSchemaFactoryResult {\n\t\tconst rolesKey = [...identity.projectRoles].sort().join('\\xff')\n\t\tconst contributorsKey = this.schemaContributors.map(it => it.getCacheKey?.({ schema, identity, project }) ?? '').join('\\xff')\n\t\tconst cacheKey = `${rolesKey}\\xff\\xff${contributorsKey}`\n\n\t\treturn this.cache.fetch(schema, cacheKey, () => {\n\t\t\tconst permissions = this.permissionFactory.create(schema, identity.projectRoles)\n\n\t\t\tconst authorizator = new Authorizator(permissions, schema.acl.customPrimary ?? false)\n\t\t\tconst dataSchemaBuilder = this.graphqlSchemaBuilderFactory.create(schema.model, authorizator)\n\t\t\tconst introspectionSchemaFactory = new IntrospectionSchemaDefinitionFactory(\n\t\t\t\tnew IntrospectionSchemaFactory(\n\t\t\t\t\tschema.model,\n\t\t\t\t\tnew EntityRulesResolver(schema.validation, schema.model),\n\t\t\t\t\tauthorizator,\n\t\t\t\t),\n\t\t\t)\n\t\t\tconst introspectionSchema = introspectionSchemaFactory.createConfig()\n\n\t\t\tconst otherSchemas = this.schemaContributors\n\t\t\t\t.map(it => it.createSchema({ schema, identity, project }))\n\t\t\t\t.filter(<T>(it: T | undefined): it is T => it !== undefined)\n\n\t\t\tconst queries = new Map<string, GraphQLFieldConfig<any, Context, any>>()\n\t\t\tconst mutations = new Map<string, GraphQLFieldConfig<any, Context, any>>()\n\t\t\tconst types: GraphQLNamedType[] = []\n\n\t\t\tfor (const schema of [introspectionSchema, ...otherSchemas]) {\n\t\t\t\tif (schema instanceof GraphQLSchema) {\n\t\t\t\t\tfor (const [field, config] of Object.entries(schema.getQueryType()?.toConfig().fields ?? {})) {\n\t\t\t\t\t\tqueries.set(field, config)\n\t\t\t\t\t}\n\t\t\t\t\tfor (const [field, config] of Object.entries(schema.getQueryType()?.toConfig().fields ?? {})) {\n\t\t\t\t\t\tmutations.set(field, config)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (const [field, config] of Object.entries(schema.query?.toConfig().fields ?? {})) {\n\t\t\t\t\t\tqueries.set(field, config)\n\t\t\t\t\t}\n\t\t\t\t\tfor (const [field, config] of Object.entries(schema.mutation?.toConfig().fields ?? {})) {\n\t\t\t\t\t\tmutations.set(field, config)\n\t\t\t\t\t}\n\t\t\t\t\ttypes.push(...(schema.types ?? []))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst graphQlSchema = dataSchemaBuilder.build({\n\t\t\t\tmutations,\n\t\t\t\tqueries,\n\t\t\t\ttypes,\n\t\t\t})\n\n\t\t\treturn { schema: graphQlSchema, permissions }\n\t\t})\n\n\t}\n}\n"],"names":["Authorizator","IntrospectionSchemaDefinitionFactory","IntrospectionSchemaFactory","EntityRulesResolver","schema","GraphQLSchema"],"mappings":";;;;AAqBO,MAAM,qBAAqB;AAAA,EAEjC,YACkB,OACA,6BACA,mBACA,oBAChB;AAJgB,SAAA,QAAA;AACA,SAAA,8BAAA;AACA,SAAA,oBAAA;AACA,SAAA,qBAAA;AAAA,EAAA;AAAA,EAGX,OAAO,QAAgB,UAAoB,SAAoD;AAC/F,UAAA,WAAW,CAAC,GAAG,SAAS,YAAY,EAAE,KAAO,EAAA,KAAK,GAAM;AAC9D,UAAM,kBAAkB,KAAK,mBAAmB,IAAI,CAAA,OAAM,GAAG,cAAc,EAAE,QAAQ,UAAU,QAAS,CAAA,KAAK,EAAE,EAAE,KAAK,GAAM;AAC5H,UAAM,WAAW,GAAG,QAAQ,KAAW,eAAe;AAEtD,WAAO,KAAK,MAAM,MAAM,QAAQ,UAAU,MAAM;AAC/C,YAAM,cAAc,KAAK,kBAAkB,OAAO,QAAQ,SAAS,YAAY;AAE/E,YAAM,eAAe,IAAIA,8BAAa,aAAa,OAAO,IAAI,iBAAiB,KAAK;AACpF,YAAM,oBAAoB,KAAK,4BAA4B,OAAO,OAAO,OAAO,YAAY;AAC5F,YAAM,6BAA6B,IAAIC,iBAAA;AAAA,QACtC,IAAIC,iBAAA;AAAA,UACH,OAAO;AAAA,UACP,IAAIC,iBAAA,oBAAoB,OAAO,YAAY,OAAO,KAAK;AAAA,UACvD;AAAA,QAAA;AAAA,MAEF;AACM,YAAA,sBAAsB,2BAA2B,aAAa;AAEpE,YAAM,eAAe,KAAK,mBACxB,IAAI,CAAM,OAAA,GAAG,aAAa,EAAE,QAAQ,UAAU,QAAS,CAAA,CAAC,EACxD,OAAO,CAAI,OAA+B,OAAO,MAAS;AAEtD,YAAA,8BAAc,IAAmD;AACjE,YAAA,gCAAgB,IAAmD;AACzE,YAAM,QAA4B,CAAC;AAEnC,iBAAWC,WAAU,CAAC,qBAAqB,GAAG,YAAY,GAAG;AAC5D,YAAIA,mBAAkBC,QAAAA,eAAe;AACpC,qBAAW,CAAC,OAAO,MAAM,KAAK,OAAO,QAAQD,QAAO,aAAa,GAAG,SAAS,EAAE,UAAU,CAAE,CAAA,GAAG;AACrF,oBAAA,IAAI,OAAO,MAAM;AAAA,UAAA;AAE1B,qBAAW,CAAC,OAAO,MAAM,KAAK,OAAO,QAAQA,QAAO,aAAa,GAAG,SAAS,EAAE,UAAU,CAAE,CAAA,GAAG;AACnF,sBAAA,IAAI,OAAO,MAAM;AAAA,UAAA;AAAA,QAC5B,OACM;AACN,qBAAW,CAAC,OAAO,MAAM,KAAK,OAAO,QAAQA,QAAO,OAAO,SAAS,EAAE,UAAU,CAAE,CAAA,GAAG;AAC5E,oBAAA,IAAI,OAAO,MAAM;AAAA,UAAA;AAE1B,qBAAW,CAAC,OAAO,MAAM,KAAK,OAAO,QAAQA,QAAO,UAAU,SAAS,EAAE,UAAU,CAAE,CAAA,GAAG;AAC7E,sBAAA,IAAI,OAAO,MAAM;AAAA,UAAA;AAE5B,gBAAM,KAAK,GAAIA,QAAO,SAAS,CAAA,CAAG;AAAA,QAAA;AAAA,MACnC;AAGK,YAAA,gBAAgB,kBAAkB,MAAM;AAAA,QAC7C;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACA;AAEM,aAAA,EAAE,QAAQ,eAAe,YAAY;AAAA,IAAA,CAC5C;AAAA,EAAA;AAGH;;"}