schema-generator.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { GraphQLTypesLoader } from '@nestjs/graphql';
  2. import {
  3. resetConfig,
  4. setConfig,
  5. getConfig,
  6. runPluginConfigurations,
  7. getFinalVendureSchema,
  8. VENDURE_ADMIN_API_TYPE_PATHS,
  9. VendureConfig,
  10. } from '@vendure/core';
  11. import { buildSchema } from 'graphql';
  12. import { GraphQLSchema } from 'graphql';
  13. let schemaPromise: Promise<GraphQLSchema>;
  14. export async function generateSchema({
  15. vendureConfig,
  16. }: {
  17. vendureConfig: VendureConfig;
  18. }): Promise<GraphQLSchema> {
  19. if (!schemaPromise) {
  20. schemaPromise = new Promise(async (resolve, reject) => {
  21. resetConfig();
  22. await setConfig(vendureConfig ?? {});
  23. const runtimeConfig = await runPluginConfigurations(getConfig() as any);
  24. const typesLoader = new GraphQLTypesLoader();
  25. const finalSchema = await getFinalVendureSchema({
  26. config: runtimeConfig,
  27. typePaths: VENDURE_ADMIN_API_TYPE_PATHS,
  28. typesLoader,
  29. apiType: 'admin',
  30. output: 'sdl',
  31. });
  32. const safeSchema = buildSchema(finalSchema);
  33. resolve(safeSchema);
  34. });
  35. }
  36. return schemaPromise;
  37. }