@graphql-cli/init
Version:
Creates a GraphQL project using a template or GraphQL Config file for your existing project.
105 lines • 4.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.askForCodegen = void 0;
const inquirer_1 = require("inquirer");
const common_1 = require("../common");
async function askForCodegen({ context, project }) {
if (!context.graphqlConfig.extensions.codegen) {
const { isCodegenAsked } = await inquirer_1.prompt([
{
type: 'confirm',
name: 'isCodegenAsked',
message: 'Do you want to use GraphQL Code Generator?',
default: true,
},
]);
if (isCodegenAsked) {
project.addDependency('@graphql-cli/codegen');
project.addScript('graphql:codegen', 'graphql codegen');
context.graphqlConfig.extensions.codegen = {
generates: {},
};
let codegenPlugins = new Set();
if (context.type === common_1.ProjectType.FullStack || context.type === common_1.ProjectType.BackendOnly) {
const backendType = await common_1.askForEnum({
enum: common_1.BackendType,
message: 'What type of backend do you use?',
defaultValue: common_1.BackendType.TS,
});
switch (backendType) {
case common_1.BackendType.TS:
codegenPlugins.add('typescript');
codegenPlugins.add('typescript-resolvers');
break;
case common_1.BackendType.Java:
codegenPlugins.add('java');
codegenPlugins.add('java-resolvers');
break;
case common_1.BackendType.Kotlin:
codegenPlugins.add('java');
codegenPlugins.add('java-kotlin');
break;
}
const { backendGeneratedFile } = await inquirer_1.prompt([
{
type: 'input',
name: 'backendGeneratedFile',
message: 'Where do you want to have generated backend code?',
default: './generated-backend.ts',
},
]);
context.graphqlConfig.extensions.codegen.generates[backendGeneratedFile] = {
plugins: [...codegenPlugins],
};
}
if (context.type === common_1.ProjectType.FullStack || context.type === common_1.ProjectType.FrontendOnly) {
const frontendType = await common_1.askForEnum({
enum: common_1.FrontendType,
message: 'What type of frontend do you use?',
defaultValue: common_1.FrontendType.TSReactApollo,
});
switch (frontendType) {
case common_1.FrontendType.TSReactApollo:
codegenPlugins.add('typescript');
codegenPlugins.add('typescript-react-apollo');
break;
case common_1.FrontendType.ApolloAngular:
codegenPlugins.add('typescript');
codegenPlugins.add('typescript-apollo-angular');
break;
case common_1.FrontendType.StencilApollo:
codegenPlugins.add('typescript');
codegenPlugins.add('typescript-stencil-apollo');
break;
case common_1.FrontendType.TSUrql:
codegenPlugins.add('typescript');
codegenPlugins.add('typescript-urql');
break;
case common_1.FrontendType.GraphQLRequest:
codegenPlugins.add('typescript');
codegenPlugins.add('typescript-graphql-request');
break;
case common_1.FrontendType.ApolloAndroid:
codegenPlugins.add('java-apollo-android');
break;
}
const { frontendGeneratedFile } = await inquirer_1.prompt([
{
type: 'input',
name: 'frontendGeneratedFile',
message: 'Where do you want to have generated frontend code?',
default: './generated-frontend.ts',
},
]);
context.graphqlConfig.extensions.codegen.generates[frontendGeneratedFile] = {
plugins: [...codegenPlugins],
};
}
for (const codegenPlugin of codegenPlugins) {
project.addDependency('@graphql-codegen/' + codegenPlugin);
}
}
}
}
exports.askForCodegen = askForCodegen;
//# sourceMappingURL=codegen.js.map