@graphql-codegen/import-types-preset
Version:
GraphQL Code Generator preset for importing types to operation file
46 lines (45 loc) • 1.83 kB
JavaScript
import addPlugin from '@graphql-codegen/add';
import { isUsingTypes } from '@graphql-codegen/plugin-helpers';
export const preset = {
buildGeneratesSection: options => {
if (!options.presetConfig.typesPath) {
throw new Error(`Preset "import-types" requires you to specify "typesPath" configuration and point it to your base types file (generated by "typescript" plugin)!`);
}
const importTypesNamespace = options.presetConfig.importTypesNamespace || 'Types';
const pluginMap = {
...options.pluginMap,
add: addPlugin,
};
const plugins = [...options.plugins];
const config = {
...options.config,
// This is for the operations plugin
namespacedImportName: importTypesNamespace,
// This is for the client-side runtime plugins
importOperationTypesFrom: importTypesNamespace,
externalFragments: [],
};
options.documents.map(documentFile => {
if (isUsingTypes(documentFile.document, config.externalFragments.map(m => m.name), options.schemaAst)) {
const importType = options.config.useTypeImports ? 'import type' : 'import';
plugins.unshift({
add: {
content: `${importType} * as ${importTypesNamespace} from '${options.presetConfig.typesPath}';\n`,
},
});
}
});
return [
{
filename: options.baseOutputDir,
plugins,
pluginMap,
config,
schema: options.schema,
schemaAst: options.schemaAst,
documents: options.documents,
},
];
},
};
export default preset;