generate-graphql-types.ts 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import { generate } from '@graphql-codegen/cli';
  2. import fs from 'fs';
  3. import { buildClientSchema } from 'graphql';
  4. import path from 'path';
  5. import { ADMIN_API_PATH, SHOP_API_PATH } from '../../packages/common/src/shared-constants';
  6. import { downloadIntrospectionSchema } from './download-introspection-schema';
  7. const CLIENT_QUERY_FILES = path.join(
  8. __dirname,
  9. '../../packages/admin-ui/src/lib/core/src/data/definitions/**/*.ts',
  10. );
  11. const E2E_ADMIN_QUERY_FILES = path.join(
  12. __dirname,
  13. '../../packages/core/e2e/**/!(import.e2e-spec|plugin.e2e-spec|shop-definitions|custom-fields.e2e-spec|price-calculation-strategy.e2e-spec|list-query-builder.e2e-spec|shop-order.e2e-spec|database-transactions.e2e-spec).ts',
  14. );
  15. const E2E_SHOP_QUERY_FILES = [path.join(__dirname, '../../packages/core/e2e/graphql/shop-definitions.ts')];
  16. const E2E_ELASTICSEARCH_PLUGIN_QUERY_FILES = path.join(
  17. __dirname,
  18. '../../packages/elasticsearch-plugin/e2e/**/*.ts',
  19. );
  20. const E2E_ASSET_SERVER_PLUGIN_QUERY_FILES = path.join(
  21. __dirname,
  22. '../../packages/asset-server-plugin/e2e/**/*.ts',
  23. );
  24. const ADMIN_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-admin.json');
  25. const SHOP_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-shop.json');
  26. // tslint:disable:no-console
  27. Promise.all([
  28. downloadIntrospectionSchema(ADMIN_API_PATH, ADMIN_SCHEMA_OUTPUT_FILE),
  29. downloadIntrospectionSchema(SHOP_API_PATH, SHOP_SCHEMA_OUTPUT_FILE),
  30. ])
  31. .then(([adminSchemaSuccess, shopSchemaSuccess]) => {
  32. if (!adminSchemaSuccess || !shopSchemaSuccess) {
  33. console.log('Attempting to generate types from existing schema json files...');
  34. }
  35. const adminSchemaJson = JSON.parse(fs.readFileSync(ADMIN_SCHEMA_OUTPUT_FILE, 'utf-8'));
  36. const shopSchemaJson = JSON.parse(fs.readFileSync(SHOP_SCHEMA_OUTPUT_FILE, 'utf-8'));
  37. const adminSchema = buildClientSchema(adminSchemaJson.data);
  38. const shopSchema = buildClientSchema(shopSchemaJson.data);
  39. const config = {
  40. namingConvention: {
  41. enumValues: 'keep',
  42. },
  43. strict: true,
  44. };
  45. const e2eConfig = {
  46. ...config,
  47. skipTypename: true,
  48. };
  49. const disableTsLintPlugin = { add: { content: '// tslint:disable' } };
  50. const graphQlErrorsPlugin = path.join(__dirname, './plugins/graphql-errors-plugin.js');
  51. const commonPlugins = [disableTsLintPlugin, 'typescript'];
  52. const clientPlugins = [...commonPlugins, 'typescript-operations', 'typescript-compatibility'];
  53. return generate({
  54. overwrite: true,
  55. generates: {
  56. [path.join(
  57. __dirname,
  58. '../../packages/core/src/common/error/generated-graphql-admin-errors.ts',
  59. )]: {
  60. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  61. plugins: [disableTsLintPlugin, graphQlErrorsPlugin],
  62. },
  63. [path.join(
  64. __dirname,
  65. '../../packages/core/src/common/error/generated-graphql-shop-errors.ts',
  66. )]: {
  67. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  68. plugins: [disableTsLintPlugin, graphQlErrorsPlugin],
  69. },
  70. [path.join(__dirname, '../../packages/core/e2e/graphql/generated-e2e-admin-types.ts')]: {
  71. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  72. documents: E2E_ADMIN_QUERY_FILES,
  73. plugins: clientPlugins,
  74. config: e2eConfig,
  75. },
  76. [path.join(__dirname, '../../packages/core/e2e/graphql/generated-e2e-shop-types.ts')]: {
  77. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  78. documents: E2E_SHOP_QUERY_FILES,
  79. plugins: clientPlugins,
  80. config: e2eConfig,
  81. },
  82. [path.join(
  83. __dirname,
  84. '../../packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts',
  85. )]: {
  86. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  87. documents: E2E_ELASTICSEARCH_PLUGIN_QUERY_FILES,
  88. plugins: clientPlugins,
  89. config: e2eConfig,
  90. },
  91. [path.join(
  92. __dirname,
  93. '../../packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts',
  94. )]: {
  95. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  96. documents: E2E_ASSET_SERVER_PLUGIN_QUERY_FILES,
  97. plugins: clientPlugins,
  98. config: e2eConfig,
  99. },
  100. [path.join(
  101. __dirname,
  102. '../../packages/admin-ui/src/lib/core/src/common/generated-types.ts',
  103. )]: {
  104. schema: [ADMIN_SCHEMA_OUTPUT_FILE, path.join(__dirname, 'client-schema.ts')],
  105. documents: CLIENT_QUERY_FILES,
  106. plugins: clientPlugins,
  107. config: {
  108. ...config,
  109. skipTypeNameForRoot: true,
  110. },
  111. },
  112. [path.join(
  113. __dirname,
  114. '../../packages/admin-ui/src/lib/core/src/common/introspection-result.ts',
  115. )]: {
  116. schema: [ADMIN_SCHEMA_OUTPUT_FILE, path.join(__dirname, 'client-schema.ts')],
  117. documents: CLIENT_QUERY_FILES,
  118. plugins: [disableTsLintPlugin, 'fragment-matcher'],
  119. config: { ...config, apolloClientVersion: 3 },
  120. },
  121. [path.join(__dirname, '../../packages/common/src/generated-types.ts')]: {
  122. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  123. plugins: commonPlugins,
  124. config: {
  125. ...config,
  126. scalars: {
  127. ID: 'string | number',
  128. },
  129. maybeValue: 'T',
  130. },
  131. },
  132. [path.join(__dirname, '../../packages/common/src/generated-shop-types.ts')]: {
  133. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  134. plugins: commonPlugins,
  135. config: {
  136. ...config,
  137. scalars: {
  138. ID: 'string | number',
  139. },
  140. maybeValue: 'T',
  141. },
  142. },
  143. },
  144. });
  145. })
  146. .then(
  147. result => {
  148. process.exit(0);
  149. },
  150. err => {
  151. console.error(err);
  152. process.exit(1);
  153. },
  154. );