generate-graphql-types.ts 3.7 KB

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