UNPKG

@graphql-codegen/urql-introspection

Version:

graphql-code-generate plugin for generating fragments matcher introspection file

56 lines (55 loc) 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validate = exports.plugin = void 0; const path_1 = require("path"); const introspection_1 = require("@urql/introspection"); const extensions = { ts: ['.ts', '.tsx'], js: ['.js', '.jsx'], json: ['.json'], }; const plugin = async (schema, _documents, pluginConfig, info) => { const config = { module: 'es2015', useTypeImports: false, ...pluginConfig, }; const ext = (0, path_1.extname)(info.outputFile).toLowerCase(); const minifiedData = (0, introspection_1.minifyIntrospectionQuery)((0, introspection_1.getIntrospectedSchema)(schema), { includeDirectives: config.includeDirectives, includeEnums: config.includeEnums, includeInputs: config.includeInputs, includeScalars: config.includeScalars, }); const content = JSON.stringify(minifiedData, null, 2); if (extensions.json.includes(ext)) { return content; } if (extensions.js.includes(ext)) { const defaultExportStatement = config.module === 'es2015' ? `export default` : 'module.exports ='; return `${defaultExportStatement} ${content}`; } if (extensions.ts.includes(ext)) { const typeImport = config.useTypeImports ? 'import type' : 'import'; return `${typeImport} { IntrospectionQuery } from 'graphql'; export default ${content} as unknown as IntrospectionQuery;`; } throw new Error(`Extension ${ext} is not supported`); }; exports.plugin = plugin; const validate = async (_schema, _documents, config, outputFile) => { const ext = (0, path_1.extname)(outputFile).toLowerCase(); const all = Object.values(extensions).reduce((acc, exts) => [...acc, ...exts], []); if (!all.includes(ext)) { throw new Error(`Plugin "urql-introspection" requires extension to be one of ${all .map(val => val.replace('.', '')) .join(', ')}!`); } if (config.module === 'commonjs' && extensions.ts.includes(ext)) { throw new Error(`Plugin "urql-introspection" doesn't support commonjs modules combined with TypeScript!`); } if (config.useTypeImports && !extensions.ts.includes(ext)) { throw new Error(`Plugin "urql-introspection" doesn't support useTypeImports modules not combined with TypeScript!`); } }; exports.validate = validate;