generate-graphql-types.ts 3.3 KB

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