generate-graphql-types.ts 5.1 KB

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