UNPKG

@graphql-codegen/typescript-enum-array

Version:
60 lines (59 loc) 2.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.plugin = void 0; const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common"); function getEnumTypeMap(schema) { var _a; const typeMap = schema.getTypeMap(); const result = []; for (const key in typeMap) { if (((_a = typeMap[key].astNode) === null || _a === void 0 ? void 0 : _a.kind) === 'EnumTypeDefinition') { result.push(typeMap[key]); } } return result; } function buildArrayDefinition(e, config) { var _a; const convert = (0, visitor_plugin_common_1.convertFactory)(config); const enumName = convert(e.astNode, { prefix: ((_a = config.enumPrefix) !== null && _a !== void 0 ? _a : true) ? config.typesPrefix : undefined, suffix: config.typesSuffix, }); const upperName = e.name .replace(/[A-Z]/g, letter => `_${letter}`) .slice(1) .toUpperCase(); const values = e .getValues() .map(v => { if (config.useMembers) { return `${enumName}.${convert(v.astNode, { transformUnderscore: true })}`; } else { return `'${v.value}'`; } }) .join(', '); if (config.constArrays) { return `export const ${upperName} = [${values}] as const;`; } else { return `export const ${upperName}: ${enumName}[] = [${values}];`; } } function buildImportStatement(enums, importFrom) { const names = Object.values(enums).map(e => e.name); return [`import { ${names.join(', ')} } from "${importFrom}";`]; } const plugin = (schema, _documents, config) => { const enums = getEnumTypeMap(schema); const content = enums.map(e => buildArrayDefinition(e, config)).join('\n'); const result = { content }; if (config.importFrom) { result['prepend'] = buildImportStatement(enums, config.importFrom); } return result; }; exports.plugin = plugin; exports.default = { plugin: exports.plugin };