mirror of
https://github.com/wassname/talk.git
synced 2026-06-27 23:24:04 +08:00
153 lines
3.4 KiB
JavaScript
Executable File
153 lines
3.4 KiB
JavaScript
Executable File
#! /usr/bin/env node
|
|
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const { graphql } = require('graphql');
|
|
const schema = require('../graph/schema');
|
|
|
|
// Copied from https://github.com/graphql/graphql-js/blob/f995c1f92e94d9c451104b6a0db8034165ef8640/src/utilities/introspectionQuery.js#L18-L113
|
|
// which is available in graphql@0.13.2
|
|
//
|
|
// TODO: remove when we upgrade to at least graphql@0.13.2.
|
|
function getIntrospectionQuery(options = {}) {
|
|
const descriptions = !(options && options.descriptions === false);
|
|
return `
|
|
query IntrospectionQuery {
|
|
__schema {
|
|
queryType { name }
|
|
mutationType { name }
|
|
subscriptionType { name }
|
|
types {
|
|
...FullType
|
|
}
|
|
directives {
|
|
name
|
|
${descriptions ? 'description' : ''}
|
|
locations
|
|
args {
|
|
...InputValue
|
|
}
|
|
}
|
|
}
|
|
}
|
|
fragment FullType on __Type {
|
|
kind
|
|
name
|
|
${descriptions ? 'description' : ''}
|
|
fields(includeDeprecated: true) {
|
|
name
|
|
${descriptions ? 'description' : ''}
|
|
args {
|
|
...InputValue
|
|
}
|
|
type {
|
|
...TypeRef
|
|
}
|
|
isDeprecated
|
|
deprecationReason
|
|
}
|
|
inputFields {
|
|
...InputValue
|
|
}
|
|
interfaces {
|
|
...TypeRef
|
|
}
|
|
enumValues(includeDeprecated: true) {
|
|
name
|
|
${descriptions ? 'description' : ''}
|
|
isDeprecated
|
|
deprecationReason
|
|
}
|
|
possibleTypes {
|
|
...TypeRef
|
|
}
|
|
}
|
|
fragment InputValue on __InputValue {
|
|
name
|
|
${descriptions ? 'description' : ''}
|
|
type { ...TypeRef }
|
|
defaultValue
|
|
}
|
|
fragment TypeRef on __Type {
|
|
kind
|
|
name
|
|
ofType {
|
|
kind
|
|
name
|
|
ofType {
|
|
kind
|
|
name
|
|
ofType {
|
|
kind
|
|
name
|
|
ofType {
|
|
kind
|
|
name
|
|
ofType {
|
|
kind
|
|
name
|
|
ofType {
|
|
kind
|
|
name
|
|
ofType {
|
|
kind
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
}
|
|
|
|
const generateIntrospectionResult = async (resultLocation, options = {}) => {
|
|
const dir = path.dirname(resultLocation);
|
|
try {
|
|
fs.accessSync(dir);
|
|
} catch (err) {
|
|
console.log(`Cannot write to ${dir}, not generating introspection.json`);
|
|
return;
|
|
}
|
|
|
|
const { data } = await graphql(schema, getIntrospectionQuery(options));
|
|
|
|
// Serialize the introspection result as JSON.
|
|
const introspectionResult = JSON.stringify(data, null, 2);
|
|
|
|
// Write the introspection result to the filesystem.
|
|
fs.writeFileSync(resultLocation, introspectionResult, 'utf8');
|
|
|
|
console.log(`Outputted result of introspectionQuery to ${resultLocation}`);
|
|
};
|
|
|
|
const graphIntrospectionFilename = path.resolve(
|
|
__dirname,
|
|
'..',
|
|
'client',
|
|
'coral-framework',
|
|
'graphql',
|
|
'introspection.json'
|
|
);
|
|
|
|
const docsIntrospectionFilename = path.resolve(
|
|
__dirname,
|
|
'..',
|
|
'docs',
|
|
'source',
|
|
'_data',
|
|
'introspection.json'
|
|
);
|
|
|
|
Promise.all([
|
|
generateIntrospectionResult(graphIntrospectionFilename, {
|
|
descriptions: false,
|
|
}),
|
|
generateIntrospectionResult(docsIntrospectionFilename),
|
|
]).catch(err => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|