generate-graphql-types.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { generate } from '@graphql-codegen/cli';
  2. import fs from 'fs';
  3. import { buildClientSchema, graphqlSync, introspectionQuery } from 'graphql';
  4. import { mergeSchemas } from 'graphql-tools';
  5. import path from 'path';
  6. import { ADMIN_API_PATH, API_PORT, SHOP_API_PATH } from '../../packages/common/src/shared-constants';
  7. import { downloadIntrospectionSchema } from './download-introspection-schema';
  8. const CLIENT_QUERY_FILES = path.join(__dirname, '../../admin-ui/src/app/data/definitions/**/*.ts');
  9. const E2E_ADMIN_QUERY_FILES = path.join(__dirname, '../../packages/core/e2e/**/!(plugin.e2e-spec|shop-definitions|custom-fields.e2e-spec).ts');
  10. const E2E_SHOP_QUERY_FILES = [
  11. path.join(__dirname, '../../packages/core/e2e/graphql/shop-definitions.ts'),
  12. ];
  13. const ADMIN_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-admin.json');
  14. const SHOP_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-shop.json');
  15. // tslint:disable:no-console
  16. Promise.all([
  17. downloadIntrospectionSchema(ADMIN_API_PATH, ADMIN_SCHEMA_OUTPUT_FILE),
  18. downloadIntrospectionSchema(SHOP_API_PATH, SHOP_SCHEMA_OUTPUT_FILE),
  19. ])
  20. .then(([adminSchemaSuccess, shopSchemaSuccess]) => {
  21. if (!adminSchemaSuccess || !shopSchemaSuccess) {
  22. console.log('Attempting to generate types from existing schema json files...');
  23. }
  24. const adminSchemaJson = JSON.parse(fs.readFileSync(ADMIN_SCHEMA_OUTPUT_FILE, 'utf-8'));
  25. const shopSchemaJson = JSON.parse(fs.readFileSync(SHOP_SCHEMA_OUTPUT_FILE, 'utf-8'));
  26. const adminSchema = buildClientSchema(adminSchemaJson.data);
  27. const shopSchema = buildClientSchema(shopSchemaJson.data);
  28. const config = {
  29. namingConvention: {
  30. enumValues: 'keep',
  31. },
  32. strict: true,
  33. };
  34. const commonPlugins = [
  35. { add: '// tslint:disable' },
  36. 'typescript',
  37. ];
  38. const clientPlugins = [
  39. ...commonPlugins,
  40. 'typescript-operations',
  41. 'typescript-compatibility',
  42. ];
  43. return generate({
  44. overwrite: true,
  45. generates: {
  46. [path.join(__dirname, '../../packages/core/e2e/graphql/generated-e2e-admin-types.ts')]: {
  47. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  48. documents: E2E_ADMIN_QUERY_FILES,
  49. plugins: clientPlugins,
  50. config,
  51. },
  52. [path.join(__dirname, '../../packages/core/e2e/graphql/generated-e2e-shop-types.ts')]: {
  53. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  54. documents: E2E_SHOP_QUERY_FILES,
  55. plugins: clientPlugins,
  56. config,
  57. },
  58. [path.join(__dirname, '../../admin-ui/src/app/common/generated-types.ts')]: {
  59. schema: [ADMIN_SCHEMA_OUTPUT_FILE, path.join(__dirname, 'client-schema.ts')],
  60. documents: CLIENT_QUERY_FILES,
  61. plugins: clientPlugins,
  62. config,
  63. },
  64. [path.join(__dirname, '../../admin-ui/src/app/common/introspection-result.ts')]: {
  65. schema: [ADMIN_SCHEMA_OUTPUT_FILE, path.join(__dirname, 'client-schema.ts')],
  66. documents: CLIENT_QUERY_FILES,
  67. plugins: ['fragment-matcher'],
  68. config,
  69. },
  70. [path.join(__dirname, '../../packages/common/src/generated-types.ts')]: {
  71. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  72. plugins: commonPlugins,
  73. config,
  74. },
  75. [path.join(__dirname, '../../packages/common/src/generated-shop-types.ts')]: {
  76. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  77. plugins: commonPlugins,
  78. config,
  79. },
  80. },
  81. });
  82. })
  83. .then(
  84. result => {
  85. process.exit(0);
  86. },
  87. err => {
  88. console.error(err);
  89. process.exit(1);
  90. },
  91. );