generate-graphql-types.ts 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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 = [
  8. path.join(__dirname, '../../packages/admin-ui/src/lib/core/src/data/definitions/**/*.ts'),
  9. path.join(__dirname, '../../packages/admin-ui/src/lib/**/*.graphql.ts'),
  10. ];
  11. const specFileToIgnore = [
  12. 'import.e2e-spec',
  13. 'plugin.e2e-spec',
  14. 'shop-definitions',
  15. 'custom-fields.e2e-spec',
  16. 'custom-field-relations.e2e-spec',
  17. 'order-item-price-calculation-strategy.e2e-spec',
  18. 'list-query-builder.e2e-spec',
  19. 'shop-order.e2e-spec',
  20. 'database-transactions.e2e-spec',
  21. 'custom-permissions.e2e-spec',
  22. 'parallel-transactions.e2e-spec',
  23. 'order-merge.e2e-spec',
  24. 'entity-hydrator.e2e-spec',
  25. 'relations-decorator.e2e-spec',
  26. ];
  27. const E2E_ADMIN_QUERY_FILES = path.join(
  28. __dirname,
  29. `../../packages/core/e2e/**/!(${specFileToIgnore.join('|')}).ts`,
  30. );
  31. const E2E_SHOP_QUERY_FILES = [path.join(__dirname, '../../packages/core/e2e/graphql/shop-definitions.ts')];
  32. const E2E_ELASTICSEARCH_PLUGIN_QUERY_FILES = path.join(
  33. __dirname,
  34. '../../packages/elasticsearch-plugin/e2e/**/*.ts',
  35. );
  36. const E2E_ASSET_SERVER_PLUGIN_QUERY_FILES = path.join(
  37. __dirname,
  38. '../../packages/asset-server-plugin/e2e/**/*.ts',
  39. );
  40. const ADMIN_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-admin.json');
  41. const SHOP_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-shop.json');
  42. // tslint:disable:no-console
  43. Promise.all([
  44. downloadIntrospectionSchema(ADMIN_API_PATH, ADMIN_SCHEMA_OUTPUT_FILE),
  45. downloadIntrospectionSchema(SHOP_API_PATH, SHOP_SCHEMA_OUTPUT_FILE),
  46. ])
  47. .then(([adminSchemaSuccess, shopSchemaSuccess]) => {
  48. if (!adminSchemaSuccess || !shopSchemaSuccess) {
  49. console.log('Attempting to generate types from existing schema json files...');
  50. }
  51. const adminSchemaJson = JSON.parse(fs.readFileSync(ADMIN_SCHEMA_OUTPUT_FILE, 'utf-8'));
  52. const shopSchemaJson = JSON.parse(fs.readFileSync(SHOP_SCHEMA_OUTPUT_FILE, 'utf-8'));
  53. const adminSchema = buildClientSchema(adminSchemaJson.data);
  54. const shopSchema = buildClientSchema(shopSchemaJson.data);
  55. const config = {
  56. namingConvention: {
  57. enumValues: 'keep',
  58. },
  59. strict: true,
  60. };
  61. const e2eConfig = {
  62. ...config,
  63. skipTypename: true,
  64. };
  65. const disableTsLintPlugin = { add: { content: '// tslint:disable' } };
  66. const graphQlErrorsPlugin = path.join(__dirname, './plugins/graphql-errors-plugin.js');
  67. const commonPlugins = [disableTsLintPlugin, 'typescript'];
  68. const clientPlugins = [...commonPlugins, 'typescript-operations', 'typescript-compatibility'];
  69. return generate({
  70. overwrite: true,
  71. generates: {
  72. [path.join(
  73. __dirname,
  74. '../../packages/core/src/common/error/generated-graphql-admin-errors.ts',
  75. )]: {
  76. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  77. plugins: [disableTsLintPlugin, graphQlErrorsPlugin],
  78. },
  79. [path.join(
  80. __dirname,
  81. '../../packages/core/src/common/error/generated-graphql-shop-errors.ts',
  82. )]: {
  83. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  84. plugins: [disableTsLintPlugin, graphQlErrorsPlugin],
  85. },
  86. [path.join(__dirname, '../../packages/core/e2e/graphql/generated-e2e-admin-types.ts')]: {
  87. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  88. documents: E2E_ADMIN_QUERY_FILES,
  89. plugins: clientPlugins,
  90. config: e2eConfig,
  91. },
  92. [path.join(__dirname, '../../packages/core/e2e/graphql/generated-e2e-shop-types.ts')]: {
  93. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  94. documents: E2E_SHOP_QUERY_FILES,
  95. plugins: clientPlugins,
  96. config: e2eConfig,
  97. },
  98. [path.join(
  99. __dirname,
  100. '../../packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts',
  101. )]: {
  102. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  103. documents: E2E_ELASTICSEARCH_PLUGIN_QUERY_FILES,
  104. plugins: clientPlugins,
  105. config: e2eConfig,
  106. },
  107. [path.join(
  108. __dirname,
  109. '../../packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts',
  110. )]: {
  111. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  112. documents: E2E_ASSET_SERVER_PLUGIN_QUERY_FILES,
  113. plugins: clientPlugins,
  114. config: e2eConfig,
  115. },
  116. [path.join(__dirname, '../../packages/admin-ui/src/lib/core/src/common/generated-types.ts')]:
  117. {
  118. schema: [ADMIN_SCHEMA_OUTPUT_FILE, path.join(__dirname, 'client-schema.ts')],
  119. documents: CLIENT_QUERY_FILES,
  120. plugins: clientPlugins,
  121. config: {
  122. ...config,
  123. skipTypeNameForRoot: true,
  124. },
  125. },
  126. [path.join(
  127. __dirname,
  128. '../../packages/admin-ui/src/lib/core/src/common/introspection-result.ts',
  129. )]: {
  130. schema: [ADMIN_SCHEMA_OUTPUT_FILE, path.join(__dirname, 'client-schema.ts')],
  131. documents: CLIENT_QUERY_FILES,
  132. plugins: [disableTsLintPlugin, 'fragment-matcher'],
  133. config: { ...config, apolloClientVersion: 3 },
  134. },
  135. [path.join(__dirname, '../../packages/common/src/generated-types.ts')]: {
  136. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  137. plugins: commonPlugins,
  138. config: {
  139. ...config,
  140. scalars: {
  141. ID: 'string | number',
  142. },
  143. maybeValue: 'T',
  144. },
  145. },
  146. [path.join(__dirname, '../../packages/common/src/generated-shop-types.ts')]: {
  147. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  148. plugins: commonPlugins,
  149. config: {
  150. ...config,
  151. scalars: {
  152. ID: 'string | number',
  153. },
  154. maybeValue: 'T',
  155. },
  156. },
  157. [path.join(__dirname, '../../packages/payments-plugin/e2e/graphql/generated-admin-types.ts')]:
  158. {
  159. schema: [ADMIN_SCHEMA_OUTPUT_FILE],
  160. documents: path.join(
  161. __dirname,
  162. '../../packages/payments-plugin/e2e/graphql/admin-queries.ts',
  163. ),
  164. plugins: clientPlugins,
  165. config: e2eConfig,
  166. },
  167. [path.join(__dirname, '../../packages/payments-plugin/e2e/graphql/generated-shop-types.ts')]:
  168. {
  169. schema: [SHOP_SCHEMA_OUTPUT_FILE],
  170. documents: path.join(
  171. __dirname,
  172. '../../packages/payments-plugin/e2e/graphql/shop-queries.ts',
  173. ),
  174. plugins: clientPlugins,
  175. config: e2eConfig,
  176. },
  177. [path.join(
  178. __dirname,
  179. '../../packages/payments-plugin/src/mollie/graphql/generated-shop-types.ts',
  180. )]: {
  181. schema: [
  182. SHOP_SCHEMA_OUTPUT_FILE,
  183. path.join(
  184. __dirname,
  185. '../../packages/payments-plugin/src/mollie/mollie-shop-schema.ts',
  186. ),
  187. ],
  188. plugins: clientPlugins,
  189. config,
  190. },
  191. },
  192. });
  193. })
  194. .then(
  195. result => {
  196. process.exit(0);
  197. },
  198. err => {
  199. console.error(err);
  200. process.exit(1);
  201. },
  202. );