diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-20 13:00:54 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-20 13:00:54 +0300 |
commit | 3cccd102ba543e02725d247893729e5c73b38295 (patch) | |
tree | f36a04ec38517f5deaaacb5acc7d949688d1e187 /scripts/frontend/graphql_possible_types_extraction.js | |
parent | 205943281328046ef7b4528031b90fbda70c75ac (diff) |
Add latest changes from gitlab-org/gitlab@14-10-stable-eev14.10.0-rc42
Diffstat (limited to 'scripts/frontend/graphql_possible_types_extraction.js')
-rwxr-xr-x | scripts/frontend/graphql_possible_types_extraction.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/scripts/frontend/graphql_possible_types_extraction.js b/scripts/frontend/graphql_possible_types_extraction.js new file mode 100755 index 00000000000..61f783086e7 --- /dev/null +++ b/scripts/frontend/graphql_possible_types_extraction.js @@ -0,0 +1,69 @@ +#!/usr/bin/env node + +const fs = require('fs/promises'); +const path = require('path'); +const assert = require('assert'); + +const ROOT_DIR = path.join(__dirname, '../../'); +const GRAPHQL_SCHEMA = path.join(ROOT_DIR, 'tmp/tests/graphql/gitlab_schema.json'); +const POSSIBLE_TYPES_REL = 'app/assets/javascripts/graphql_shared/possible_types.json'; +const POSSIBLE_TYPES = path.join(ROOT_DIR, POSSIBLE_TYPES_REL); + +function extractTypes(schema) { + return Object.fromEntries( + // eslint-disable-next-line no-underscore-dangle + schema.data.__schema.types + .filter((type) => type.possibleTypes) + .map(({ name, possibleTypes }) => [name, possibleTypes.map((subtype) => subtype.name)]), + ); +} + +async function main() { + let schema; + try { + schema = JSON.parse(await fs.readFile(GRAPHQL_SCHEMA, 'utf-8')); + } catch (e) { + console.error( + 'Could not read the GraphQL Schema, make sure to run: bundle exec rake gitlab:graphql:schema:dump', + ); + throw e; + } + + const possibleTypes = extractTypes(schema); + + if (process.argv.includes('--check')) { + const previousTypes = JSON.parse(await fs.readFile(POSSIBLE_TYPES, 'utf-8')); + + assert.deepStrictEqual( + previousTypes, + possibleTypes, + ` +${POSSIBLE_TYPES_REL} needs to be regenerated, please run: + node scripts/frontend/graphql_possible_types_extraction.js --write +and commit the changes! + `, + ); + return; + } + + if (process.argv.includes('--write')) { + const stringifiedPossibleTypes = JSON.stringify(possibleTypes, null, 2); + await fs.writeFile(POSSIBLE_TYPES, `${stringifiedPossibleTypes}\n`); + console.log(`Successfully updated ${POSSIBLE_TYPES_REL}`); + return; + } + + throw new Error(` +ERROR: Please use the script correctly: +Usage: graphql_possible_types_extraction [options] + +Options: + --check Check whether there are new Interface or Union types + --write Generate new possible types + `); +} + +main().catch((error) => { + console.warn(error.message); + process.exitCode = 1; +}); |