{"version":3,"file":"ContentSchemaResolver.cjs","sources":["../../../../../packages/engine-http/src/content/ContentSchemaResolver.ts"],"sourcesContent":["import { DatabaseContext, SchemaProvider, SchemaWithMeta } from '@contember/engine-system-api'\nimport { calculateSchemaChecksum, filterSchemaByStage, normalizeSchema } from '@contember/schema-utils'\nimport { Schema } from '@contember/schema'\nimport { ContentApiSpecificCache } from './ContentApiSpecificCache'\nimport { createMemoizer } from '../utils/memoizeObject'\n\nconst memoizedSchema = createMemoizer(calculateSchemaChecksum)\n\nexport class ContentSchemaResolver {\n\tprivate baseSchemaCache: SchemaWithMeta | null = null\n\n\tconstructor(private readonly schemaProvider: SchemaProvider) {\n\t}\n\n\tpublic clearCache() {\n\t\tthis.baseSchemaCache = null\n\t}\n\n\tpublic async getSchema({ db, stage, normalize }: {\n\t\tdb: DatabaseContext\n\t\tnormalize?: boolean\n\t\tstage?: string\n\t}): Promise<SchemaWithMeta> {\n\t\tconst prevBaseSchema = this.baseSchemaCache\n\t\tconst { schema, meta } = await this.schemaProvider.fetch({ db, currentSchema: prevBaseSchema })\n\t\tthis.baseSchemaCache = {\n\t\t\tschema: memoizedSchema(schema),\n\t\t\tmeta: meta,\n\t\t}\n\t\tconst finalSchema = getSchema(this.baseSchemaCache.schema, { stage, normalize })\n\t\treturn {\n\t\t\tschema: finalSchema,\n\t\t\tmeta: this.baseSchemaCache.meta,\n\t\t}\n\t}\n}\n\nconst cache = new ContentApiSpecificCache<Schema, Schema>({})\nconst getSchema = (schema: Schema, options: { stage?: string; normalize?: boolean }) => {\n\tconst cacheKey = [options.stage, options.normalize].join('\\xff')\n\treturn cache.fetch(schema, cacheKey, () => {\n\t\tlet result = schema\n\t\tif (options.normalize) {\n\t\t\tresult = normalizeSchema(result)\n\t\t}\n\t\tif (options.stage) {\n\t\t\tresult = filterSchemaByStage(result, options.stage)\n\t\t}\n\t\treturn result\n\t})\n}\n\n"],"names":["createMemoizer","calculateSchemaChecksum","ContentApiSpecificCache","normalizeSchema","filterSchemaByStage"],"mappings":";;;;;;;;AAMA,MAAM,iBAAiBA,6BAAeC,mCAAuB;AAEtD,MAAM,sBAAsB;AAAA,EAGlC,YAA6B,gBAAgC;AAAhC,SAAA,iBAAA;AAF7B,kBAAA,MAAQ,mBAAyC,IAAA;AAAA,EAAA;AAAA,EAK1C,aAAa;AACnB,SAAK,kBAAkB;AAAA,EAAA;AAAA,EAGxB,MAAa,UAAU,EAAE,IAAI,OAAO,aAIR;AAC3B,UAAM,iBAAiB,KAAK;AAC5B,UAAM,EAAE,QAAQ,KAAK,IAAI,MAAM,KAAK,eAAe,MAAM,EAAE,IAAI,eAAe,eAAA,CAAgB;AAC9F,SAAK,kBAAkB;AAAA,MACtB,QAAQ,eAAe,MAAM;AAAA,MAC7B;AAAA,IACD;AACM,UAAA,cAAc,UAAU,KAAK,gBAAgB,QAAQ,EAAE,OAAO,WAAW;AACxE,WAAA;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,KAAK,gBAAgB;AAAA,IAC5B;AAAA,EAAA;AAEF;AAEA,MAAM,QAAQ,IAAIC,wBAAwC,wBAAA,EAAE;AAC5D,MAAM,YAAY,CAAC,QAAgB,YAAqD;AACjF,QAAA,WAAW,CAAC,QAAQ,OAAO,QAAQ,SAAS,EAAE,KAAK,GAAM;AAC/D,SAAO,MAAM,MAAM,QAAQ,UAAU,MAAM;AAC1C,QAAI,SAAS;AACb,QAAI,QAAQ,WAAW;AACtB,eAASC,4BAAgB,MAAM;AAAA,IAAA;AAEhC,QAAI,QAAQ,OAAO;AACT,eAAAC,YAAA,oBAAoB,QAAQ,QAAQ,KAAK;AAAA,IAAA;AAE5C,WAAA;AAAA,EAAA,CACP;AACF;;"}