UNPKG

@graphql-codegen/gql-tag-operations-preset

Version:
138 lines (137 loc) 6.24 kB
import * as addPlugin from '@graphql-codegen/add'; import * as gqlTagPlugin from '@graphql-codegen/gql-tag-operations'; import * as typedDocumentNodePlugin from '@graphql-codegen/typed-document-node'; import * as typescriptPlugin from '@graphql-codegen/typescript'; import * as typescriptOperationPlugin from '@graphql-codegen/typescript-operations'; import { ClientSideBaseVisitor } from '@graphql-codegen/visitor-plugin-common'; import * as fragmentMaskingPlugin from './fragment-masking-plugin.js'; import { processSources } from './process-sources.js'; export { default as babelPlugin } from './babel.js'; export const preset = { buildGeneratesSection: options => { var _a, _b; // TODO: add link? // eslint-disable-next-line no-console console.warn('DEPRECATED: `gql-tag-operations-preset` is deprecated in favor of `client-preset`.'); /** when not using augmentation stuff must be re-exported. */ const reexports = []; const visitor = new ClientSideBaseVisitor(options.schemaAst, [], options.config, options.config); let fragmentMaskingConfig = null; if (typeof ((_a = options === null || options === void 0 ? void 0 : options.presetConfig) === null || _a === void 0 ? void 0 : _a.fragmentMasking) === 'object') { fragmentMaskingConfig = options.presetConfig.fragmentMasking; } else if (((_b = options === null || options === void 0 ? void 0 : options.presetConfig) === null || _b === void 0 ? void 0 : _b.fragmentMasking) === true) { fragmentMaskingConfig = {}; } const isMaskingFragments = fragmentMaskingConfig != null; const sourcesWithOperations = processSources(options.documents, node => { if (node.kind === 'FragmentDefinition') { return visitor.getFragmentVariableName(node); } return visitor.getOperationVariableName(node); }); const sources = sourcesWithOperations.map(({ source }) => source); const pluginMap = { ...options.pluginMap, [`add`]: addPlugin, [`typescript`]: typescriptPlugin, [`typescript-operations`]: typescriptOperationPlugin, [`typed-document-node`]: typedDocumentNodePlugin, [`gen-dts`]: gqlTagPlugin, }; const plugins = [ { [`add`]: { content: `/* eslint-disable */` } }, { [`typescript`]: {} }, { [`typescript-operations`]: {} }, { [`typed-document-node`]: {} }, ...options.plugins, ]; const genDtsPlugins = [ { [`add`]: { content: `/* eslint-disable */` } }, { [`gen-dts`]: { sourcesWithOperations } }, ]; let gqlArtifactFileExtension = '.d.ts'; if (options.presetConfig.augmentedModuleName == null) { gqlArtifactFileExtension = '.ts'; reexports.push('gql'); } const config = { ...options.config, inlineFragmentTypes: isMaskingFragments ? 'mask' : options.config['inlineFragmentTypes'], }; let fragmentMaskingFileGenerateConfig = null; if (isMaskingFragments === true) { let fragmentMaskingArtifactFileExtension = '.d.ts'; if (fragmentMaskingConfig.augmentedModuleName == null) { reexports.push('fragment-masking'); fragmentMaskingArtifactFileExtension = '.ts'; } fragmentMaskingFileGenerateConfig = { filename: `${options.baseOutputDir}/fragment-masking${fragmentMaskingArtifactFileExtension}`, pluginMap: { [`fragment-masking`]: fragmentMaskingPlugin, }, plugins: [ { [`fragment-masking`]: {}, }, ], schema: options.schema, config: { useTypeImports: options.config.useTypeImports, augmentedModuleName: fragmentMaskingConfig.augmentedModuleName, unmaskFunctionName: fragmentMaskingConfig.unmaskFunctionName, }, documents: [], documentTransforms: options.documentTransforms, }; } let indexFileGenerateConfig = null; const reexportsExtension = options.config.emitLegacyCommonJSImports ? '' : '.js'; if (reexports.length) { indexFileGenerateConfig = { filename: `${options.baseOutputDir}/index.ts`, pluginMap: { [`add`]: addPlugin, }, plugins: [ { [`add`]: { content: reexports.map(moduleName => `export * from "./${moduleName}${reexportsExtension}"`).join('\n'), }, }, ], schema: options.schema, config: {}, documents: [], documentTransforms: options.documentTransforms, }; } return [ { filename: `${options.baseOutputDir}/graphql.ts`, plugins, pluginMap, schema: options.schema, config, documents: sources, documentTransforms: options.documentTransforms, }, { filename: `${options.baseOutputDir}/gql${gqlArtifactFileExtension}`, plugins: genDtsPlugins, pluginMap, schema: options.schema, config: { ...config, augmentedModuleName: options.presetConfig.augmentedModuleName, gqlTagName: options.presetConfig.gqlTagName || 'gql', }, documents: sources, documentTransforms: options.documentTransforms, }, ...(fragmentMaskingFileGenerateConfig ? [fragmentMaskingFileGenerateConfig] : []), ...(indexFileGenerateConfig ? [indexFileGenerateConfig] : []), ]; }, };