generate-graphql-types.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import { generate } from '@graphql-codegen/cli';
  2. import { Types } from '@graphql-codegen/plugin-helpers';
  3. import fs from 'fs';
  4. import path from 'path';
  5. import { downloadIntrospectionSchema } from './download-introspection-schema';
  6. const CLIENT_QUERY_FILES = [
  7. path.join(__dirname, '../../packages/admin-ui/src/lib/core/src/data/definitions/**/*.ts'),
  8. path.join(__dirname, '../../packages/admin-ui/src/lib/**/*.ts'),
  9. ];
  10. const ADMIN_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-admin.json');
  11. const SHOP_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-shop.json');
  12. /* eslint-disable no-console */
  13. Promise.all([downloadIntrospectionSchema('admin'), downloadIntrospectionSchema('shop')])
  14. .then(([adminSchemaSuccess, shopSchemaSuccess]) => {
  15. if (!adminSchemaSuccess || !shopSchemaSuccess) {
  16. console.log('Attempting to generate types from existing schema json files...');
  17. }
  18. const adminSchemaJson = JSON.parse(fs.readFileSync(ADMIN_SCHEMA_OUTPUT_FILE, 'utf-8'));
  19. const shopSchemaJson = JSON.parse(fs.readFileSync(SHOP_SCHEMA_OUTPUT_FILE, 'utf-8'));
  20. const config = {
  21. namingConvention: {
  22. enumValues: 'keep',
  23. },
  24. strict: true,
  25. scalars: {
  26. Money: 'number',
  27. },
  28. };
  29. const e2eConfig = {
  30. ...config,
  31. skipTypename: true,
  32. };
  33. const disableEsLintPlugin = { add: { content: '/* eslint-disable */' } };
  34. const graphQlErrorsPlugin = path.join(__dirname, './plugins/graphql-errors-plugin.js');
  35. const commonPlugins = [disableEsLintPlugin, 'typescript'];
  36. const clientPlugins = [...commonPlugins, 'typescript-operations', 'typed-document-node'];
  37. const codegenConfig: Types.Config = {
  38. overwrite: true,
  39. generates: {
  40. [path.join(
  41. __dirname,
  42. '../../packages/core/src/common/error/generated-graphql-admin-errors.ts',
  43. )]: {
  44. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  45. plugins: [disableEsLintPlugin, graphQlErrorsPlugin],
  46. },
  47. [path.join(
  48. __dirname,
  49. '../../packages/core/src/common/error/generated-graphql-shop-errors.ts',
  50. )]: {
  51. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  52. plugins: [disableEsLintPlugin, graphQlErrorsPlugin],
  53. },
  54. [path.join(__dirname, '../../packages/admin-ui/src/lib/core/src/common/generated-types.ts')]:
  55. {
  56. schema: [ADMIN_SCHEMA_OUTPUT_FILE, path.join(__dirname, 'client-schema.ts')],
  57. documents: CLIENT_QUERY_FILES,
  58. plugins: clientPlugins,
  59. config: {
  60. ...config,
  61. skipTypeNameForRoot: true,
  62. },
  63. },
  64. [path.join(
  65. __dirname,
  66. '../../packages/admin-ui/src/lib/core/src/common/introspection-result.ts',
  67. )]: {
  68. schema: [ADMIN_SCHEMA_OUTPUT_FILE, path.join(__dirname, 'client-schema.ts')],
  69. documents: CLIENT_QUERY_FILES,
  70. plugins: [disableEsLintPlugin, 'fragment-matcher'],
  71. config: { ...config, apolloClientVersion: 3 },
  72. },
  73. [path.join(__dirname, '../../packages/common/src/generated-types.ts')]: {
  74. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  75. plugins: commonPlugins,
  76. config: {
  77. ...config,
  78. scalars: {
  79. ...(config.scalars ?? {}),
  80. ID: 'string | number',
  81. },
  82. maybeValue: 'T',
  83. },
  84. },
  85. [path.join(__dirname, '../../packages/common/src/generated-shop-types.ts')]: {
  86. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  87. plugins: commonPlugins,
  88. config: {
  89. ...config,
  90. scalars: {
  91. ...(config.scalars ?? {}),
  92. ID: 'string | number',
  93. },
  94. maybeValue: 'T',
  95. },
  96. },
  97. [path.join(
  98. __dirname,
  99. '../../packages/payments-plugin/src/mollie/graphql/generated-shop-types.ts',
  100. )]: {
  101. schema: [
  102. SHOP_SCHEMA_OUTPUT_FILE,
  103. path.join(__dirname, '../../packages/payments-plugin/src/mollie/api-extensions.ts'),
  104. ],
  105. plugins: clientPlugins,
  106. config,
  107. },
  108. },
  109. };
  110. return generate(codegenConfig);
  111. })
  112. .then(
  113. result => {
  114. process.exit(0);
  115. },
  116. err => {
  117. console.error(err);
  118. process.exit(1);
  119. },
  120. );