generate-graphql-types.ts 8.9 KB

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